使用實體框架5EF多重關係
所以我有一個客戶。客戶可以有許多地址,但至少有一個。其中一個地址也將被設置爲主地址(必需)。我嘗試了各種映射,但到目前爲止,我在構建或種子數據庫時遇到錯誤。
客戶:
public class Customer
{
public int CustomerId { get; set;}
public String CustomerName { get; set; }
public int PrimaryAddressId { get; set; }
public virtual CustomerAddress PrimaryAddress { get; set; }
public virtual ICollection<CustomerAddress> CustomerAddresses { get; set; }
}
地址:
public class CustomerAddress : Address
{
public int CustomerAddressId { get; set; }
public int CustomerId { get; set; }
public virtual Customer Customer { get; set; }
}
我映射的這一部分是否正常工作。它位於CustomerAddress上。
this.HasRequired(c => c.Customer)
.WithMany(d => d.CustomerAddresses)
.HasForeignKey(c => c.CustomerId);
但是,如何指定在Customer中設置PrimaryAddress的正確映射?還是這是錯誤的方法?
感謝
編輯 - 同時使用阿諾德和LueTM的答案:
此代碼現在工作。
客戶:
public class Customer
{
public int CustomerId { get; set;}
public String CustomerName { get; set; }
// public int PrimaryAddressId { get; set; } created in mapping
public virtual CustomerAddress PrimaryAddress { get; set; }
public virtual ICollection<CustomerAddress> CustomerAddresses { get; set; }
}
地址:
public class CustomerAddress : Address
{
public int CustomerAddressId { get; set; }
public int CustomerId { get; set; }
public virtual Customer Customer { get; set; }
}
客戶映射:
modelBuilder.Entity<Customer>
.HasOptional(c => c.PrimaryAddress)
.WithOptionalDependent().Map(m => m.MapKey("PrimaryAddressId"));
modelBuilder.Entity<Customer>
.HasMany(c => c.CustomerAddresses)
.WithRequired(c => c.Customer)
.HasForeignKey(c => c.CustomerId)
.WillCascadeOnDelete(false);
我使用存儲庫,以確保新的地址首先創建,保存,然後也設置爲主要並再次保存。存儲庫確保主要是「必需的」。
請在出現的地方顯示錯誤和代碼。 (通過編輯你的文章) –