2014-12-16 10 views
5

Finora ho utilizzato Entity Framework e un database di SQL Server. Quindi posso rappresentare il nome della mia tabella come nome di classe e nomi di proprietà come proprietà come il seguente.Denominazione di classi C# da colonne di tabelle errate

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

I nomi di tabella e colonna sono gli stessi della mia classe.

Ma ora lavorerò a un progetto che utilizza un database Postgresql. I nomi delle tabelle e i nomi delle colonne sono come questo.

  • Tabelle products, product_categories (minuscolo)
  • Colonne product_id, product_name, category_id, ....

Quindi non vogliono usare i nomi delle classi in questo modo:

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

questo sembra come una brutta convenzione di denominazione. Come posso risolvere questo problema?

+0

Stai parlando di qualcosa di simile: http://stackoverflow.com/questions/2944974/t4-nome-nome-camelcase-without-underscore –

+0

EF ha la possibilità di utilizzare i metadati per annotare i nomi dei campi, vedere (https : //entityframework.codeplex.com/wikipage? title = Codice% 20Prima% 20Annotazioni) ed è possibile utilizzare un provider PostGreSql con EF (http://www.codeproject.com/Articles/783552/Using-PostgreSQL-with-Entity -Framework-in-ASP-NET) – Ruskin

risposta

6

Usa attributi tabella e colonna. Da MSDN example:

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

Non si tratta di un approccio code-first? Non sono chiaro se l'OP ha l'opzione per questo. Sto solo chiedendo di essere curioso. Tnx –

+0

Sì, penso che sia il codice prima. OP non era chiaro su quale tecnica stava usando. Quindi se l'OP o chiunque altro con un problema simile ha questa domanda e capita di usare il codice per primo, questo dovrebbe essere utile. Sto assumendo il codice prima da quando ha scritto lui stesso la classe (a meno che non fosse inteso solo per essere rappresentativo di ciò che EF stava facendo prima con il modello o il DB) – mason

0

Un approccio comune è quello di mappare le entità alle vostre classi di dominio, che è il nome usando # convenzioni standard C.

Quindi questa tabella product_id, product_name, categori_id, .. si map a:

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

Poi si crea un aiutante mapper che traduce soggetto all'oggetto dominio:

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

lascio a voi decidere se un mapper dovrebbe essere una classe helper separata, un metodo statico sulla classe Product. Inoltre, quando si salvano i dati si inverte il processo, ovvero si esegue il mapping dell'oggetto dominio in un'entità.

Problemi correlati