2

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

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

我想要一个数据库中的产品表,它将价格与其属性分开。例如;

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

然后,当我从数据库中获取产品时,它会自动将AmountCurrency绑定到Product的Price对象。我应该如何使用 Entity Framework Code First 来制作这个结构?

4

2 回答 2

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");
 }
于 2013-04-13T11:15:57.863 回答
2

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

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

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

阅读更多关于[复杂类型]

于 2013-04-13T11:18:34.927 回答