2010-12-13 103 views
1

我刚刚开始将EF CTP 5应用于一个新项目。在这种情况下,由于模糊的数据库命名约定,我的所有数据库字段的命名都与我的POCO属性不同。我是正确的思维映射最好的办法是重写OnModelCreating,并有这样的代码实体框架代码第一个CTP5映射

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

这最终将会非常大非常快,是不是真的做到这一点的最好方法是什么?

回答

1

感谢您的答案

我结束了我原来的做法坚持,因为我想保留实体数据层独立。

但是为了使它更易于管理,我将上下文设置为分部类,并为每个实体创建了一个文件,使用像MapUsers或MapRoles这样的私有方法,然后在OnModelCreating中创建一个文件,我只是将这些方法称为这些方法。

+0

有趣的解决方案 - 使用partials然后事件。这意味着每个poco你可以有1个部分类,对吧? (更坏的情况)。 – 2011-02-02 00:45:07

+0

是的,没错。也许它不适合每个人,但对我来说,它使代码更容易管理。 – Gavin 2011-02-02 07:30:50

3

我想你应该考虑使用新的CTP5 属性。在这种情况下,使用数据注释似乎是比流畅的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; } 
} 
+0

你有两次sales_id – 2010-12-13 14:57:27

+0

我修好了,谢谢! – 2010-12-13 15:02:44

+1

尽管如果您要将您的业务实体与数据层分开,这似乎不是最好的方法 – KallDrexx 2010-12-13 15:57:15