2014-12-16 12 views
5

Do tej pory używałem Entity Framework i bazy danych SQL Server. Tak więc mogę reprezentować moją nazwę tabeli jako nazwę klasy i nazwy właściwości jako właściwości takie jak następujące.Nazywanie klas C# ze złych kolumn tabeli

class Product{ 
     public string Id { get; set;} 
     public string Name { get; set;} 
} 

Nazwy tabeli i kolumny są takie same w mojej klasie.

Ale teraz będę pracował nad projektem korzystającym z bazy danych Postgresql. Nazwy tabel i nazwy kolumn są takie.

  • Stoły products, product_categories (małymi literami)
  • Kolumny product_id, product_name, category_id, ....

Więc nie chcesz używać nazwy klas tak:

class products { 
     public string product_id { get; set; } 
     public string product_name { get; set; } 
     public string category_id { get; set; } 
} 

to wygląda jak brzydkie konwencje nazewnictwa. Jak mogę rozwiązać ten problem?

+0

Czy mówisz o czymś takim: http://stackoverflow.com/questions/2944974/t4-fieldname-in-camelcase-without-underscore –

+0

EF ma możliwość używania metadanych do opisywania nazw pól, zobacz (https : //entityframework.codeplex.com/wikipage? title = Code% 20First% 20Annotations) i możesz użyć dostawcy PostGreSql z EF (http://www.codeproject.com/Articles/783552/Using-PostgreSQL-with-Entity -Framework-in-ASP-NET) – Ruskin

Odpowiedz

6

Użyj atrybutów tabeli i kolumny. Od MSDN example:

[Table("InternalBlogs")] 
public class Blog 
{ 
    [Column("BlogDescription", TypeName="ntext")] 
    public String Description {get;set;} 
} 
+0

Czy to nie jest podejście oparte na kodzie? Nie jestem pewien, czy OP ma taką opcję. Po prostu pytam, jestem ciekawa. Tnx –

+0

Tak, myślę, że to kod pierwszy. OP nie był pewien, jakiej techniki używał. Jeśli więc OP lub ktokolwiek inny z podobnym problemem ma to pytanie i korzysta z kodu w pierwszej kolejności, powinno to być przydatne. Domyślam się, że to kod od samego początku, ponieważ sam napisał klasę (chyba, że ​​miała to być tylko reprezentacja tego, co EF robił najpierw z modelem lub DB) – mason

0

Wspólne podejście jest mapowanie podmioty do swoich klas domen, które możesz wymienić przy użyciu standardowych C# konwencje.

Więc ten stół product_id, product_name, categori_id, .. mapować do:

public class Product 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public int Category { get; set; } 
} 

Następnie należy utworzyć pomocnika odwzorowujący że przekłada podmiotu do przedmiotu domenie:

public Product ProductMapper(EntityProduct entity) 
{ 
    return new Product 
    { 
     Id = entity.product_id, 
     Name = entity.product_name, 
     Category = entity.category_id, 
    } 
} 

zostawiam, aby zdecydować, czy mapowanie powinno być oddzielną klasą pomocniczą, statyczną metodą na klasie Product. Ponadto podczas zapisywania danych odwracasz proces, czyli mapujesz obiekt domeny na encję.

Powiązane problemy