我有一个简单的一对多映射,如下所示:
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;
}
}
出了什么问题,任何人都可以帮助我吗?
谢谢!