处理父母/孩子最有效的方式
我想在添加关系时减少与数据库的往返。
public class Parent { public virtual int Id { get; set; } public virtual string Name { get; set; } public virtual IList Children { get; set; } //inverse = true; cascade = all } public class Child { public virtual int Id { get; set; } public virtual string Name { get; set; } public virtual Parent Parent { get; set; } } Child child = Session.Get(1); Parent parent = Session.Load(1); child.Parent = parent; Session.Flush();
它有效,我只为孩子选择并为孩子更新。但它不适用于二级缓存。
=== Session 1 === Parent parent = Session.Get(1); var count = parent.Children.Count; === Session 1 === === Session 2 === Child child = Session.Get(1); Parent parent = Session.Load(1); child.Parent = parent; Session.Flush(); === Session 2 === === Session 3 === Parent parent = Session.Get(1); var count = parent.Children.Count; //INCORRECT! Session 2 didn't update collection. === Session 3 ===
如果我在会话2中添加parent.Children.Add(child),NHibernate会选择parent,但为什么呢?我认为这是开销。
I want to reduce roundtrips to database when I add relationship.
public class Parent { public virtual int Id { get; set; } public virtual string Name { get; set; } public virtual IList Children { get; set; } //inverse = true; cascade = all } public class Child { public virtual int Id { get; set; } public virtual string Name { get; set; } public virtual Parent Parent { get; set; } } Child child = Session.Get(1); Parent parent = Session.Load(1); child.Parent = parent; Session.Flush();
It works, I have only select for child and update for child. But it doesn't work with second level cache.
=== Session 1 === Parent parent = Session.Get(1); var count = parent.Children.Count; === Session 1 === === Session 2 === Child child = Session.Get(1); Parent parent = Session.Load(1); child.Parent = parent; Session.Flush(); === Session 2 === === Session 3 === Parent parent = Session.Get(1); var count = parent.Children.Count; //INCORRECT! Session 2 didn't update collection. === Session 3 ===
If I add parent.Children.Add(child) in Session 2, NHibernate do select for parent, but why? I think it's overhead.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
好吧,当我处理 IE 类别上的父/子关系时,我有一个统一类别,其中包含示例 ID、名称和 ParentID,使用它您可以定义任何级别的父/子关系
well, when I handle parent/child relationship on I.E. categories i have a unite category wich contains in example ID, Name and ParentID, using this you can define parent/child relationships to any level