相关疑难解决方法(0)

何时在NHibernate/Hibernate OneToMany关系上使用inverse = false?

我一直试图掌握Hibernate的逆属性,它似乎只是概念上难以解决的问题之一.

我得到的要点是,当你有一个使用一对多映射的Child对象集合的父实体(例如Parent)时,在映射上设置inverse = true告诉Hibernate'另一边(Child) )有责任更新自己以维护其表中的外键引用'.

这样做对于在代码中向集合中添加Children,然后保存Parent(使用cascade-all set)有两个好处:在数据库上保存一个不必要的命中(因为没有逆集,Hibernate认为它有两个地方更新FK关系),并根据官方文档:

如果关联的列被声明为NOT NULL,则NHibernate在创建或更新关联时可能会导致约束违规.要防止出现此问题,必须使用标记为inverse ="true"的多值结束(集合或包)的双向关联.

到目前为止,这一切似乎都有意义.我不明白是这样的:你什么时候会希望使用逆=真正在一个一对多的关系?

collections nhibernate hibernate inverse one-to-many

70
推荐指数
3
解决办法
3万
查看次数

NHibernate通过代码和SQLite数据库进行映射:保存多对一的父子实体,子类获取null外键

这个问题的变化已被要求,并回答了很多次,答案有很多重叠的细节.我已经尝试过这些答案提出的许多不同的事情,但是没有一个在我的案例中有效.

我有一个带有父表和子表的SQLite数据库.这是一个非常简单的设置.我正在使用NHibernate 4.0.4进行代码映射而不是流畅,因为我建议前者是新的,而后者是改进的.

实体:

public class BillingItem
{
    public virtual int ID { get; set; }
    public virtual string Name { get; set; }
    // ... other properties
    public virtual ICollection<PaymentItem> PaymentItems { get; set; }

    public BillingItem()
    {
        PaymentItems = new List<PaymentItem>();
    }
}

public class PaymentItem
{
    public virtual int ID { get; set; }
    public virtual BillingItem OwningBillingItem { get; set; }
    // ... other properties
}
Run Code Online (Sandbox Code Playgroud)

BillingItem映射:

public class BillingItemMapping : ClassMapping<BillingItem> …
Run Code Online (Sandbox Code Playgroud)

.net c# nhibernate many-to-one nhibernate-mapping-by-code

5
推荐指数
1
解决办法
638
查看次数