2010-12-13 14 views
1

Ich habe gerade begonnen, EF CTP 5 in ein neues Projekt zu implementieren. In diesem Fall werden alle meine Datenbankfelder aufgrund einer obskuren Namenskonvention für die Datenbank anders als meine POCO-Eigenschaften benannt. Bin ich richtig in die beste Art und Weise zu denken dies abzubilden ist OnModelCreating außer Kraft zu setzen und haben Codes wie dieseEntity Framework Code Erste CTP5 Mapping

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

Diese sehr großen sehr schnell Ende geht, ist es wirklich der beste Weg, dies zu tun?

Antwort

1

Danke für die Antworten

ich mit meinem ursprünglichen Ansatz am Ende kleben, als ich die Einheiten getrennt von der Datenschicht halten wollte.

Um es überschaubarer zu machen, habe ich den Kontext zu einer partiellen Klasse gemacht und eine Datei für jede Entität mit einer privaten Methode wie MapUsers oder MapRoles erstellt und dann im OnModelCreating diese Methoden aufgerufen.

+0

Interessante Lösung - Verwenden von Partials und dann des Events. Das heißt, Sie könnten 1 Teilklasse pro Poco haben, oder? (schlimmeres Szenario). –

+0

ja das stimmt. Vielleicht ist es nicht für jedermann, aber für mich macht es den Code viel überschaubarer. – Gavin

3

Ich denke, Sie sollten die Verwendung der neuen CTP5 Spalte Attribut in Betracht ziehen. Die Verwendung von Datenannotationen scheint in diesem Fall eine bessere Wahl als eine flüssige API zu sein. Ihre Sale-Klasse aussehen wird der Code unten:

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

Sie haben sales_id zweimal –

+0

Ich reparierte es, danke! –

+1

Wenn Sie Ihre Business Entities von Ihrer Datenebene getrennt halten, scheint dies jedoch nicht der beste Ansatz zu sein. – KallDrexx

Verwandte Themen