2010-12-13 104 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