NHibernate与字符串主键和关系

Joh*_*hn_ 5 .net nhibernate nhibernate-mapping

我刚刚被这个问题困住了一个小时,我最终烦恼地发现了这个问题.

情况

我有一个用户将字符串作为主键的表,该表具有各种多对一和多对多的关系.

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

部分解决方案

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

真正的解决方案

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

Mar*_*ski 4

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

return session.Get<T>(id);
Run Code Online (Sandbox Code Playgroud)

这条语句中,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>
Run Code Online (Sandbox Code Playgroud)

我的 C# 代码如下所示:

public Merchant GetMerchantById(string id)
{
     return session.Get<Merchant>(id);
}
Run Code Online (Sandbox Code Playgroud)