1

我先使用代碼創建客戶管理應用程序。 客戶可以有許多地址,但只有一個「主要」地址。如何將現有外鍵映射到導航屬性(代碼優先)

這裏是我的客戶模型:

public class Customer 
{ 
    [Key] 
    public int Id { get; set; } 

    public string FirstName{ get; set; } 

    public string LastName{ get; set; } 

    public int MainInvoicingAddressId { get; set; } 

    [ForeignKey("MainBillingAddressId")] 
    public Address MainBillingAddress { get; set; } 

    public virtual ICollection<Address> Addresses { get; set; } 

我的地址型號:

public class Address 
    { 
     [Key] 
     public int Id { get; set; } 

     public string Address1 { get; set; } 

     public int CustomerId { get; set; } 

     [ForeignKey("CustomerId")] 
     public virtual Customer Customer { get; set; } 
    } 

但是,當我創建數據庫時,我有一個自動生成的,因爲地址表的外鍵CUSTOMER_ID導航屬性MainBillingAddress。

所以在地址表上,我有2個外鍵給客戶(「CustomerId」和「Customer_Id」)。

我想要的是使用現有的外鍵「CustomerId」與MainBillingAddress的關係。

可能嗎?

回答

0

AFAIK你想要的東西不能用EF完成。啥子你似乎想的是:

  • 一個客戶和地址之間

    1. 一對一的關係,以及客戶和地址之間有很多關係。

    這是不能做到的,因爲用EF表示1意味着FK < => PK。 (對於example),與2不兼容。..

    我虛心地建議您閱讀How to implement a one-to-many relationship with an "Is Current" requirement並用「Is main」替換「Is Current」。

    我可以想像這樣

    modelBuilder.Entity<Customer>(). 
        HasOptional(x => x.MainBillingAddress). // or required 
        WithMany(y => y.IsDefaultFor); 
    

    另一種解決方案,但這至少導致圓形refrences。

  • 相關問題