场景:实体框架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'太多了?
答案 0 :(得分:0)
我找到了解决方案。
我只需要像这样传递SaveOptions.DetectChangesBeforeSave:
context.SaveChanges(SaveOptions.DetectChangesBeforeSave);
这允许我将详细对象添加到主对象,而不是将每个单独的细节附加到上下文。
答案 1 :(得分:-1)
你可以:
向接受Context的实体添加构造函数,Context通过引用保存在私有字段中。然后,您的AddDetail
函数可以检查私有_context
字段,如果它引用了实例化的上下文,则在保存主记录后将详细信息添加到上下文中。
<强> 然而... 强>
这可能不是最好的模式,因为它违反了单一责任原则。我认为最好使用Repository模式,并让Repository提交未保存的Details。 Here是一篇关于在实体框架4中实现存储库模式的精彩文章。