E.F.代码优先更新一对多错误

时间:2016-08-23 18:09:36

标签: c# entity-framework ef-code-first

我有一个简单的一对多映射,如下所示:

public class Parent{

    public int Id { get; set; }

    public string Name { get; set; }

    public ICollection<Child> Childs { get; set;}
}

public class Child{

    public int Id { get; set; }

    public string Name { get; set; }

    public int ParentId { get; set; }

    public virtual Parent Parent { get; set; }
}

我使用流畅的API来映射关系:

modelBuilder.Entity<Parent>()
.HasKey(x => x.Id)
.HasMany(x => x.Childs)
.WithRequired().HasForeignKey<int>(x => x.ParentId).WillCascadeOnDelete();

modelBuilder.Entity<Child>().HasKey(e => e.Id);

因此,当我尝试使用新的子项更新Parent,删除,添加或删除时,我收到此错误:

  

操作失败:无法更改关系,因为一个或多个外键属性不可为空。当对关系进行更改时,相关的外键属性将设置为空值。如果外键不支持空值,则必须定义新关系,必须为外键属性分配另一个非空值,或者必须删除不相关的对象。

我也使用PropertyInfo在SaveChanges之前将更改后的值从“父”设置为“旧”,就像那样。

 public T Update(T entity)
{
  using (U entityContext = new U())
  {
    T existingEntity = UpdateEntity(entityContext, entity);
    SimpleMapper.PropertyMap(entity, existingEntity);

    entityContext.SaveChanges();
    return existingEntity;
  }
}

出了什么问题,任何人都可以帮助我吗?

谢谢!

0 个答案:

没有答案