.net之NHibernate具有字符串主键和关系

mfryf 阅读:57 2025-06-02 22:19:02 评论:0

我刚刚被这个问题困扰了一个小时,最终我很烦人地发现了这个问题。

情况

我有一个表,该表使用字符串作为主键,该表具有与该主键无关的各种多对一和多对多关系。

当从表中搜索多个项目时,所有关系都被带回。但是,每当我尝试通过主键(字符串)获取对象时,它都没有恢复任何关系,它们总是设置为0。

部分解决方案

因此,我查看了我的日志,以查看SQL所做的事情,并返回了正确的结果。所以我以各种随机的方式尝试了各种事情,最终得出了答案。字符串传递给get方法的情况与数据库中的情况完全不同,因此,当它试图将关系项与主要实体进行匹配时,它什么也没有找到(或者至少是NHIbernate不是' t,因为如上所述,SQL实际上返回了正确的结果)

真正的解决方案

还有其他人遇到吗?如果是这样,当将SQL结果与实体匹配时,如何告诉NHibernate忽略大小写?这是愚蠢的,因为它在现在突然开始关注字符串的情况之前就已经很好地工作了。

请您参考如下方法:

我在数据库的ref表上有完全相同的情况。我以与您相同的方式映射模式文件。在代码中,当我通过主键查询记录时,我使用NHibernate ISession的实例执行以下操作:

return session.Get<T>(id); 

在此语句中,T是您要查询的类型,id是您要查找的字符串id(主键)

这是我的映射文件的示例:
    <class name="Merchant" table="T__MERCHANT"> 
        <id name="MerchantId" column="MERCHANT_ID" type="string"> 
            <generator class="assigned" /> 
        </id> 
 
        <property name="MerchantStatusId" column="MERCHANT_STATUS_ID" type="Char" not-null="true" length="1" /> 
        <property name="MerchantStatusName" column="MERCHANT_STATUS_NAME" type="string" length="50" /> 
        <property name="MerchantName" column="NAME" type="string" not-null="true" length="50" /> 
 </class> 
</hibernate-mapping> 

我的C#代码如下所示:
public Merchant GetMerchantById(string id) 
{ 
     return session.Get<Merchant>(id); 
} 


标签:hibernate
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

关注我们

一个IT知识分享的公众号