2013-04-13 94 views
2

我有一個類似於下面的結構。Code First Model Mapping

public class Price 
{ 
    public decimal Amount {get; set;} 
    public string Currency {get; set;} 
} 

public class Product : BaseEntity 
{ 
    public int Id {get; set;} 
    public string Name {get; set;} 
    public Price Price {get; set;} 
} 

我想要一個數據庫中的Product表,它將把Price分解爲它的屬性。例如;

**ProductTable** 
--Id 
--Name 
--Amount 
--Currency 

然後,當我從數據庫中的產品,它會自動綁定金額貨幣價格產品對象。我應該如何使用實體框架代碼優先來構造這個結構?

回答

4

價格財產必須是虛擬的,它應該工作:

public class Product 
{ 
    public int Id {get; set;} 
    public string Name {get; set;} 
    public virtual Price Price {get; set;} 
} 

編輯:

您可以通過覆蓋OnModelCreating方法在DbContext類指定自定義列名:

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
{ 
    modelBuilder.Entity<Product>().Property(u => u.Price.Amount) 
             .HasColumnName("Amount"); 
} 
+0

_If_延遲加載啓用,這是默認。 – CodeCaster

2

回答@MiłoszWierzbicki將創建一個單獨的表Price

但在你的情況下,我不認爲你需要一個單獨的表 因此定義價格作爲複雜類型將相同的表內的「價格」附加到數據庫字段名稱相同,也會自動映射名稱retriving或保存數據

[ComplexType] 
public class Price 
{ 
    public decimal Amount {get; set;} 
    public string Currency {get; set;} 
} 

閱讀更多關於[ComplexType]

+0

不是。它將創建Price_Amount和Price_Currency列,因爲Price對象沒有主鍵。 –

+0

多數民衆贊成在即我在這裏回答說 –