C# 插入NHibernate对象而不获取对其所有子对象的引用
让我们选取一个示例模型作为参考:C# 插入NHibernate对象而不获取对其所有子对象的引用,c#,nhibernate,C#,Nhibernate,让我们选取一个示例模型作为参考: public class Cat{ public long Id; public string Name; public IEnumerable<Cat> Friends; //ManyToMany } 只要sally在当前范围内,这就可以正常工作。但在web环境中,考虑到我在MVC中工作,我不一定要将所有持久化对象都保存在内存中。考虑一个页面,在那里我可以创建新的cat并从多选列表中选择子项 如果MVC控制器只返回猫的ID
public class Cat{
public long Id;
public string Name;
public IEnumerable<Cat> Friends; //ManyToMany
}
只要sally在当前范围内,这就可以正常工作。但在web环境中,考虑到我在MVC中工作,我不一定要将所有持久化对象都保存在内存中。考虑一个页面,在那里我可以创建新的cat并从多选列表中选择子项
如果MVC控制器只返回猫的ID(这是我想要的),我不能执行以下操作,否则我会得到一个重复条目异常
Cat mary = new Cat{ Name="Mary, Friends = new Cat[] {new Cat{ Id = 1}, new Cat{Id=2}... };
Repository.Save(mary); //Boom, because it tries to persist the new children with duplicate IDs
相反,我必须
long[] ids;
IEnumerable<Cat> friends = from cat in Repository.Query() where Id in ids select cat; //Which does a SELECT query
Cat mary = new Cat{ Name="Mary", Friends = friends };
Repository.Save(mary); //Which runs fine;
long[]id;
IEnumerable friends=来自存储库中的cat.Query(),其中Id在ids中选择cat//哪一个是选择查询
猫玛丽=新猫{Name=“玛丽”,朋友=朋友};
保存(玛丽)//运行良好;
现在我的问题是:假设在某个时间我知道一个已持久化对象集合的主键,我如何插入一个新对象,该对象引用了集合的对象,而无需查询数据库以获取它们全部
我知道NHibernate有缓存,所以经常查询会话
中的已知ID并不会触发完整的查询,但我想知道更多关于NHibernate的功能
由于该问题是出于示例目的而提出的,如果我不关心反向关系,请不要介意。因为您有ID,所以只需使用
session.Load
获取引用,而无需从db加载它们
只需将第二行更改为以下内容:
var friends = from id in ids select session.Load<Cat>(id);
var friends=从ids中的id选择会话。加载(id);
由于您拥有ID,因此只需使用session.Load
即可获取引用,而无需从数据库中加载引用
只需将第二行更改为以下内容:
var friends = from id in ids select session.Load<Cat>(id);
var friends=从ids中的id选择会话。加载(id);