.net之NHibernate具有字符串主键和关系
我刚刚被这个问题困扰了一个小时,最终我很烦人地发现了这个问题。
情况
我有一个表,该表使用字符串作为主键,该表具有与该主键无关的各种多对一和多对多关系。
当从表中搜索多个项目时,所有关系都被带回。但是,每当我尝试通过主键(字符串)获取对象时,它都没有恢复任何关系,它们总是设置为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);
}
1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。



