0

我有產品和客戶實體。一個客戶可以與多個產品相關,一個產品可以僅與一個客戶相關。沒有產品的客戶不能存在,因此僅在添加新產品時創建客戶。這聽起來像一個簡單的場景,但問題是我只需要我的表中唯一的客戶。我的意思是,如果將新產品添加到數據庫併爲其分配了一個已存在於數據庫中的客戶(由主鍵確定),那麼將向新產品分配與現有客戶的關係,而不是添加重複的客戶到數據庫。有沒有一種乾淨的方法可以通過使用實體框架關係來實現這一點,還是應該插入一些我自己的外部邏輯來控制客戶創建和分配到產品?在這兩種方式中,請給我一些例子或簡要描述情況。實體框架具有唯一實體的一對多關係

回答

1

你的實體應設置是這樣的:

public class Customer 
{ 
    [Key] 
    public int Id { get; set; } 
    public List<Product> Products { get; set; } 
} 

public class Product 
{ 
    [Key] 
    public int ProductId { get; set; } 
    public int CustomerId { get; set; } 
    [ForeignKey("CustomerId")] 
    public Customer Customer { get; set; } 
} 

然後,每當您保存您必須檢查是否存在於數據庫客戶並分配一個客戶的產品。如果產品上的客戶具有有效的PK,那麼它將更新數據庫,否則它將創建客戶。 EF將在保存時處理此問題。例如:

var customer = context.Customers.FirstOrDefault(x => x.Id = id); 
var product = new Product() 
{ 
    Customer = customer ?? new Customer() 
}; 
+0

我在找到答案之前自己找到了解決方案。這是一樣的,但你的優雅很多次,因爲你只需要一行代碼就可以確定是否應該創建一個新的客戶,併爲框架留下一切。我絕對接受你的答案。你釘了它!非常感謝支持和這樣清晰和全面的例子! – Salivan

+0

顧客=顧客?新客戶();就足夠了 – Szer