实体框架代码第一个CTP5映射

时间:2010-12-13 10:27:00

标签: c# entity-framework code-first

我刚刚开始将EF CTP 5实施到一个新项目中。在这种情况下,由于隐藏的数据库命名约定,我的所有数据库字段的命名都与我的POCO属性不同。我认为最好的映射方法是覆盖OnModelCreating并拥有这样的代码

    modelBuilder.Entity<Sale>().Property(s => s.ID).HasColumnName("sale_id");
    modelBuilder.Entity<Sale>().Property(s => s.ProductName).HasColumnName("product_name");
    modelBuilder.Entity<Sale>().Property(s => s.ProductPrice).HasColumnName("product_price");
    modelBuilder.Entity<Sale>().Property(s => s.SaleDate).HasColumnName("sale_date");

这将非常快,非常快,这是真的最好的方法吗?

2 个答案:

答案 0 :(得分:3)

我认为你应该考虑使用新的CTP5 Column 属性。在这种情况下,使用数据注释似乎是比流畅的API更好的选择。您的销售类看起来像下面的代码:

public class Sale
{
    [Column(Name="sale_id")]
    public int ID { get; set; }

    [Column(Name="product_name")]
    public string ProductName { get; set; }

    [Column(Name="product_price")]
    public string ProductPrice { get; set; }

    [Column(Name="sale_date")]
    public DateTime SaleDate { get; set; }
}

答案 1 :(得分:1)

感谢您的回答

我最终坚持使用原始方法,因为我希望将实体与数据层分开。

然而,为了使其更易于管理,我将上下文设置为部分类,并使用MapUsers或MapRoles等私有方法为每个实体创建一个文件,然后在OnModelCreating中调用这些方法。