如果修改了详细信息实体,为什么EntityFramework会在主 - 详细信息关系中更新主实体?

时间:2011-11-15 12:55:47

标签: c# .net entity-framework

我在数据库中有一个非常简单的主 - 详细结构,可以使用以下模型通过Entity Framework访问:

Entity Framework model
主实体修改通过插入/更新/删除存储过程进行映射。

加载并编辑详细信息实体,并将其主实体加载到上下文中,但不进行修改。保存更改时,即使主实体未完全更改(详细信息实体=>参数化更新语句;主实体=>更新存储过程调用),详细信息实体和主实体也会更新。

using (var context = new PlayGroundEntities())
{
    var master = context.Masters.First(m => m.MasterId == MasterAId);
    var detail = context.Details.First(d => d.DetailId == MasterADetail1Id);
    detail.DetailValue = "Detail Value";
    context.SaveChanges();
}

这对我来说很奇怪,如果未修改Master实体,我想摆脱Master实体更新sp调用。 如果没有通过存储过程映射主实体更新(正常的ef内容,生成简单的参数化插入/更新/删除sql语句),则不会发生这种奇怪的行为。

这只是一个非常简单的例子。在真正的项目中,我有一个复杂的模型,在那里出现同样的问题,我真的很想摆脱它。不幸的是,我真的必须使用存储过程映射,并且加载“Master”实体也很重要。

有没有人经历过这样的事情或设法以某种方式摆脱它? 我正在使用.NET Framweork 4.0发布的Entity Framework 4.0。

提前感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

我不太确定,但也许这会有所帮助,所以请尝试分离master以摆脱Master实体更新sp:

context.Detach(master);