Questa domanda è stata posta qui 4 anni fa: EF Mapping per il prefisso di tutti i nomi di colonne all'interno di una tabella Spero ci sia una migliore gestione in questi giorni.
Utilizzo l'EF6 Fluent API, che chiamerò Code First Without Migrations. Dispongo di POCO per i miei modelli e la maggior parte dei nomi delle colonne del mio database è definita come [SingularTableName]Field
(ad esempio, CustomerAddress db column maps to Address campo in Customers POCO)
Tavolo:
CREATE TABLE dbo.Customers (
-- ID, timestamps, etc.
CustomerName NVARCHAR(50),
CustomerAddress NVARCHAR(50)
-- etc.
);
Modello:
public class Customer
{
// id, timestamp, etc
public string Name {get;set;}
public string Address {get;set;}
}
ModelBuilder:
modelBuilder<Customer>()
.Property(x => x.Name).HasColumnName("CustomerName");
modelBuilder<Customer>()
.Property(x => x.Address).HasColumnName("CustomerAddress");
Obbiettivo:
Quello che mi piacerebbe davvero è poter dire qualcosa del genere per FluentAPI:
modelBuilder<Customer>().ColumnPrefix("Customer");
// handle only unconventional field names here
// instead of having to map out column names for every column
Con le convenzioni code-first basate su modelli questo è diventato molto semplice. Basta creare una classe che implementa IStoreModelConvention
...
class PrefixConvention : IStoreModelConvention<EdmProperty>
{
public void Apply(EdmProperty property, DbModel model)
{
property.Name = property.DeclaringType.Name + property.Name;
}
}
... e aggiungilo alle convenzioni di OnModelCreating
:
modelBuilder.Conventions.Add(new PrefixConvention());