2013-12-20 159 views
9

我想用Code First創建一個SQL CE 4數據庫。在下面運行示例代碼時,即使數據完全相同,Entity Framework也會每次插入新的產品記錄。 我需要做什麼才能使Entity Framework不會創建重複的關聯產品? ForeignID1和Product對象中的值是數據庫中已存在的值,但實體框架正在擦除我給它的ID並添加一個新的ID。實體框架爲關聯對象創建新/重複條目

namespace MyApp.Model 
{ 
    public class MyThing 
    {  
     public int ID { get; set; } 

     [ForeignKey("Product")] 
     public int ForeignID1{ get; set; } 

     public virtual Product Product { get; set; } 
    } 
} 

// Data.DataManager.cs 

public class DataManager : DbContext 
{ 
    public DbSet<Model.MyThing> Things{ get; set; } 
    public DbSet<Model.Product> Products { get; set; } 
} 

這些是它輸入的值。應該只有在表中的值由多個MyThings

enter image description here

回答

6

引用爲了避免您必須在相關實體附加到上下文中的重複:

context.Products.Attach(myThing.Product); 
context.Things.Add(myThing); 

或者...

myThing.Product = null; 
context.Things.Add(myThing); 

...會,如果你已經設置myThing.ForeignID1到現有的產品ID正常工作。

+0

這在某種程度上有效。但現在我想我的問題的一部分是,它使用我的ID作爲身份證密鑰,導致身份證被設置爲1,2,3等。 – teynon

+0

我結束了使用這個和'[[ DatabaseGenerated(DatabaseGeneratedOption.None)]'來禁用標識列。我也爲每個孩子(產品)運行我自己的更新過程。 – teynon

+0

在使用Attach()編輯你想添加到數據庫的對象的屬性之前,注意到這一點也很重要....也許我只是愚蠢的... –