gpt4 book ai didi

c# - "The given key was not present in the dictionary"nHibernate C#

转载 作者:太空狗 更新时间:2023-10-30 01:26:18 24 4
gpt4 key购买 nike

我是 nHibernate 的新手。我在两个表“User”和“UserProfile”之间设置了以下一对一映射。

用户.hbm.xml:

 <?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" namespace="Core.Domain.Model" assembly="Core">

<class name="User" table="Users" dynamic-update="true" lazy="false">
<cache usage="read-write"/>
<id name="UserId" column="UserId" type="guid">
</id>
<one-to-one name="UserProfile" class="UserProfile"/>
</class>
</hibernate-mapping>

用户配置文件.hbm.xml:

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" namespace="Core.Domain.Model" assembly="Core">
<class name="UserProfile" table="UserProfiles" dynamic-update="true" lazy="false">
<cache usage="read-write"/>
<id name="UserProfileId" column="UserProfileId" type="int">
<generator class="native"/>
</id>
<property name="Description" length="100"/>
<many-to-one name="User" unique="true" column="UserId"/>
</class>
</hibernate-mapping>

我对上述映射的 POCO 是:

public class User
{
public virtual Guid UserId { get; set; }
public virtual UserProfile UserProfile { get; set; }

}

public class UserProfile
{
public virtual int UserProfileId { get; set; }
public virtual User User { get; set; }
}

现在,当我尝试保留我的“用户”对象时,出现异常:“字典中不存在给定的键”:

using (ISession session = SessionFactory.OpenSession())

有人知道这里会发生什么吗?

最佳答案

我将您的 hbm 映射和类复制到我的测试项目中。创建 SessionFactory 时出现错误。您是否有机会在使用语句中首次访问 SessionFactory 时创建它?如果是这样,那么这将有望解决问题:

我通过添加修复了它

public virtual String Description { get; set; }

到 UserProfile 类。如果您的代码中有它,只是在复制和粘贴过程中忘记了它,我会尝试进一步调查。

编辑:

此错误的另一个可能来源 - 发现 here :

请确认您所有的 .hbm.xml 文件都是嵌入式资源。

如果仍然没有帮助,您能否发布异常的 StackTrace?

关于c# - "The given key was not present in the dictionary"nHibernate C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5303322/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com