簡體   English   中英

實體框架:如何更改實體中現有的整數外鍵值?

[英]Entity Framework: how to change existing integer foreign key value in an Entity?

這應該是一個簡單的Entity Framework 6問題:如何將外鍵字段值從3更改為5,並成功保存到Microsoft SQL Server數據庫? 我的代碼成功地將其他字段保存在同一記錄中,但是沒有將外鍵字段的值從3更改為5(它保持3不變,沒有錯誤。)

更多信息:

我在OrderLine和Product之間有一個嵌套關系,其中OrderLine是Product的多對一(Product是父表,在OrderLine中可以為null。)OrderLine有一個整數外鍵字段,它引用Product productid。 在此POCO中,實體框架在OrderLine中也具有Product關系:

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;}
}

當我將OrderLine.productid更改為其他值時,它只是不會保存該值,而是會像數量一樣成功地修改其他字段。 OrderLine為EntityState.Modified且Product Unchanged (因為我們沒有修改Product,而只是引用了另一個。)

我想念什么? 我是否需要將Entity Framework Product關系設置為null才能保存productid,或者下面的代碼應如何更改以允許保存? 我只想更改productid值,而不是僅從數據庫中加載整個Product記錄以更改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.

更新:

當我添加代碼以在保存之前將Product關系設置為null product = null時,它將成功保存並引用其他產品。 我使用ASP.NET MVC數據綁定來最初在Controller中獲取ICollection<OrderLine> orderLines

這么奇怪。 Product productUnchanged因此我猜由於存在產品數據,所以Entity Framework決定跳過字段productid? 將Product product設置為null時,它決定允許productid字段更改?

如果指向另一個FK對象,則需要更改ID並刪除對導航對象的引用,或者必須同時更新ID和導航對象。 但是,通常,如果您更改一個而不更改另一個,則EF會引發異常。 我想知道您是否已關閉該設置,就像您是否關閉了ValidateOnSaveEnabled嗎?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM