这应该是一个简单的实体框架6问题:如何将外键字段值从3更改为5并成功保存到Microsoft SQL Server数据库?我的代码成功地将其他字段保存在同一条记录中,但不会将外键字段值从3更改为5(保持为3,不会出错)
更多信息:
我在OrderLine和Product之间有一个嵌套关系,其中OrderLine是对Product的多对一关系(Product是父表,在OrderLine中可以为null)OrderLine有一个引用productid的整数外键字段。在此POCO中,实体框架在订单行中也有产品关系:
public class OrderLine {
public int orderid {get;set;}
public int productid {get;set;} // Foreign Key to Product
public int quantity {get;set;}
public Product product {get;set;} // generated by Entity Framework relation
}
public class Product {
public int productid {get;set;}
}
当我更改订单行时。如果将productid设置为其他值,则它不会保存该值,但会成功修改其他字段,如quantity。订单行为
EntityState.Modified
产品是
Unchanged
(因为我们并没有修改产品,只是参考了不同的产品。)
我错过了什么?我是否需要将实体框架产品关系设置为null以获取要保存的productid,或者下面的代码应该如何更改以允许保存?我只想更改productid值,而不是从数据库加载整个产品记录来更改id值。
orderLine.productid = 5;
orderLine.quantity = orderLine.quantity++;
DbContext.Entry(orderLine).State = EntityState.Modified;
DbContext.SaveChanges();
// quantity increments by one and persists, productid stays 3.
更新:
当我添加代码以将产品关系设置为null时
product = null
保存前,成功保存并引用其他产品。我使用ASP。NET MVC数据绑定以获取
ICollection<OrderLine> orderLines
最初在控制器中。
真奇怪。
Product product
是
未更改
所以我猜实体框架决定跳过productid字段,因为产品数据存在?将Product Product设置为null时,是否决定允许productid字段更改?