我刚刚开始将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");
这将非常快,非常快,这是真的最好的方法吗?
答案 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中调用这些方法。