集合实体框架5中的级联更新

时间:2014-03-18 19:24:16

标签: c# entity-framework cascade

我有以下型号:

RegisterType中的“Fields”属性是IList。

我正在使用Entity Framework 5,我想知道是否有任何方法可以更新我的RegisterType对象并级联以在Fields属性中自动添加,更新或删除我的RegisterField。

我试过这个

dbContext.Entry(registerType).State = EntityState.Modified;

dbContext.SaveChanges();

但它不起作用。

我正在使用MVC Web项目,因此我无法保存从数据库中读取的第一个对象的状态。

1 个答案:

答案 0 :(得分:4)

您需要以与registerType相同的方式设置RegisterField实体的状态。

dbContext.Entry(registerType).State = EntityState.Modified;

forech (var f in registerType.Fields)
{
    dbContext.Entry(f).State = ( f.Id == default(int) ? EntityState.Added : EntityState.Modified);
}

否则它们都默认为未修改,SaveChanges()

将忽略它们

此外,您需要确保在每个添加的RegisterField实体上设置RegisterTypeId,否则EF会在您附加registerType时阻塞。