如何使用实体框架替换外键实体

本文关键字:实体 替换 框架 何使用 | 更新日期: 2023-09-27 18:34:37

我首先在我的项目中使用实体框架代码。我有两个 entiy 有一个对多个的关系:

public class Car
{
    public Guid ID { get; set; }
    public string Make { get; set; }
    public string Model { get; set; }
}
public class CarMapping
{
    public Guid ID { get; set; }
    public virtual Car Car { get; set; } 
}

现在我得到了一个carID,想在CarMapping中更换汽车。我尝试这样做:

var carMapping = DbContext.CarMappings.SingleOrDefault(m => m.ID == id);
carMapping.Car.ID = carID;

但这会导致EF更新Car并抛出异常,说主键无法更改。

如何使用实体框架替换外键实体

调用carMapping.Car属性将返回Car对象。因此,您无法更改对象Car主键。

如果你想在CarMapping中改变汽车,你应该做下一步:

Car car = DbContext.Cars.Single(r=>r.ID == carID);
CarMapping carMapping = DbContext.CarMappings.SingleOrDefault(m => m.ID == id);
carMapping.Car = car;
DbContext.SaveChanges();