代码优先模型映射

时间:2013-04-13 09:45:03

标签: c# .net entity-framework ef-code-first entity-framework-5

我有类似的结构,如下所示。

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

然后,当我从数据库获取产品时,它会自动将金额货币绑定到产品<的价格对象/ strong>即可。我应该如何使用Entity Framework Code First创建此结构?

2 个答案:

答案 0 :(得分:4)

Price属性必须是虚拟的,它应该有效:

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");
 }

答案 1 :(得分:2)

@Miłosz给出的回答Wierzbicki将为Price

创建一个单独的表格

但在你的情况下,我不认为你需要一个单独的表 因此,将价格定义为复杂类型会在同一个表中将其与“数据”附加到数据库字段名称相同,并且还会在重新搜索或保存数据时自动映射名称

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

详细了解[ComplexType]