处理父母/孩子最有效的方式

发布于 2024-10-08 04:30:24 字数 1014 浏览 0 评论 0原文

我想在添加关系时减少与数据库的往返。

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

走走停停 2024-10-15 04:30:24

好吧,当我处理 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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文