坚持主细节关系EF4 POCO的细节

时间:2010-05-20 12:41:20

标签: c# entity-framework linq-to-entities poco master-detail

场景:实体框架4,POCO模板和主要细节关系。

假设我有一个这样的主类型:

//partial implementation of master entity
partial class Master
{
    public void AddDetail(x,y,z)
    {
        var detail = new Detail()
        {
           X = x,
           Y = y,
           Z = z,
        };

        //add the detail to the master
        this.Details.Add(detail);
    }
}

如果我然后将一个主实例添加到我的上下文并提交,则不会保存详细信息:

var masterObject = new Master();
masterObject.AddDetail(1,2,3);
myContext.MasterSet.AddObject(masterObject);

使用POCO模板时,是否有任何方法可以通过重新设置来保持详细信息? 还是其他任何方式? Master实体中的Details集合是一个FixUpCollection,因此它应该跟踪IMO的变化。

那么,任何想法如何使这项工作W / O杀死POCO'太多了?

2 个答案:

答案 0 :(得分:0)

我找到了解决方案。

我只需要像这样传递SaveOptions.DetectChangesBeforeSave:

context.SaveChanges(SaveOptions.DetectChangesBeforeSave);

这允许我将详细对象添加到主对象,而不是将每个单独的细节附加到上下文。

答案 1 :(得分:-1)

可以

向接受Context的实体添加构造函数,Context通过引用保存在私有字段中。然后,您的AddDetail函数可以检查私有_context字段,如果它引用了实例化的上下文,则在保存主记录后将详细信息添加到上下文中。

<强> 然而...

这可能不是最好的模式,因为它违反了单一责任原则。我认为最好使用Repository模式,并让Repository提交未保存的Details。 Here是一篇关于在实体框架4中实现存储库模式的精彩文章。