我将组成一些更简单的实体以更好地理解:
public class Room
{
[Required]
public int Id { get; set; }
[Required]
public int Name { get; set; }
[Required]
[Column("House_Id")]
public int HouseId { get; set; }
public virtual House House { get; set; }
}
public class House
{
[Required]
public int Id{ get; set; }
public string Name { get; set; }
public virtual ICollection<Room> Rooms { get; set; }
}
现在,可以说,我有一个 House 实体,在数据库中有 4 个与之相关的房间。我想更新房子并删除其中的 2 个房间。我正在使用 Asp.Net MVC4 顺便说一句。
var house = HouseRepository.Get(id);
house.Name = model.Name; // Some string
house.Name = model.Rooms; // ICollection<Room> from view with 2 rooms in it, cuz user deleted other two in view
HouseRepository.SaveChanges();
return house;
发生的情况是我收到错误消息:操作失败:无法更改关系,因为一个或多个外键属性不可为空。当对关系进行更改时,相关的外键属性将设置为空值。如果外键不支持空值,则必须定义新的关系,必须为外键属性分配另一个非空值,或者必须删除不相关的对象。
我需要找到一个解决方案如何从数据库中删除不相关的房间。我应该在何时何地做?我已经尝试过一些东西,但现在即使我正在添加房间,我也会遇到这个错误。
有什么简单的方法告诉EF它应该自己删除这些房间吗?