C# NHibernate从单个对象对同一记录的多个引用
我使用的是Fluent NHibernate,设置如下: 一个地址对象,它是地址字段的简单列表 一个公司对象,它有两个对地址对象的引用,MainAddress和InvoiceAddress 我遇到的问题是,有时MainAddress和InvoiceAddress都可能引用Address表中的同一条记录 地址通过搜索查找,使用以下内容:C# NHibernate从单个对象对同一记录的多个引用,c#,.net,nhibernate,fluent-nhibernate,C#,.net,Nhibernate,Fluent Nhibernate,我使用的是Fluent NHibernate,设置如下: 一个地址对象,它是地址字段的简单列表 一个公司对象,它有两个对地址对象的引用,MainAddress和InvoiceAddress 我遇到的问题是,有时MainAddress和InvoiceAddress都可能引用Address表中的同一条记录 地址通过搜索查找,使用以下内容: ICriteria c = session.CreateCriteria(typeof(Address)) .Add(Example.Cr
ICriteria c = session.CreateCriteria(typeof(Address))
.Add(Example.Create(address).ExcludeNone());
因为每个地址是单独选择的,这会导致同一记录的两个实例,这会导致NHibernate在试图保存公司对象时呕吐
“具有相同标识符值的不同对象已与会话关联”
解决这个问题的最佳方法是什么
谢谢 您应该使用NHibernate的
合并
合并():
- 如果当前存在具有相同标识符的持久实例 与会话关联,复制 将给定对象的状态添加到 持久实例
- 如果当前没有与会话关联的持久实例, 尝试从数据库中加载,或 创建一个新的持久实例
- 将返回持久实例
- 给定实例不会与会话关联,而是 保持分离
SaveOrUpdateCopy
相同,但该命令显然是:
我认为SaveOrUpdateCopy是一种
已经从NHibernate退出了
时间和合并是添加在
2.1(显然是从hibernate移植的东西)。无论如何,我很高兴
NHibernate有这个能力是因为
编写和处理合并
手动操作是非常无聊的代码
写作
您应该使用NHibernate的
Merge
合并():
- 如果当前存在具有相同标识符的持久实例 与会话关联,复制 将给定对象的状态添加到 持久实例
- 如果当前没有与会话关联的持久实例, 尝试从数据库中加载,或 创建一个新的持久实例
- 将返回持久实例
- 给定实例不会与会话关联,而是 保持分离
SaveOrUpdateCopy
相同,但该命令显然是:
我认为SaveOrUpdateCopy是一种
已经从NHibernate退出了
时间和合并是添加在
2.1(显然是从hibernate移植的东西)。无论如何,我很高兴
NHibernate有这个能力是因为
编写和处理合并
手动操作是非常无聊的代码
写作
除非您在不同的会话中进行选择,然后将它们混合(这是不正确的),否则NHibernate的默认行为是为同一行检索同一实例,而不管您查询了多少次
确保您使用的是单个会话。除非您在不同会话中进行选择,然后将它们混合(这是不正确的),否则NHibernate的默认行为是为同一行检索同一实例,而不管您查询了多少次
请确保您使用的是单个会话。这确实起到了作用,但我认为Diego是正确的,因为它是在单独的会话中执行每个查询造成的。我将研究纠正…这确实起到了作用,但我认为迭戈是正确的,它是由在单独的会话中执行每个查询引起的。将研究纠正这一点。。。