2016-11-18 3 views
3

Этот вопрос задавался здесь 4 года назад: EF Mapping to prefix all column names within a table Я надеюсь, что в эти дни лучше работать.Добавить название столбца в EF6 FluentAPI

Я использую API EF6 Fluent, что я назову Код первым без миграции. У меня есть Pocos для моих моделей, и большинство моих имен столбцов базы данных определяются как [SingularTableName]Field (например, колонка CustomerAddress дб сопоставлена ​​Адрес поле Клиенты POCO)

Таблица:

CREATE TABLE dbo.Customers (
    -- ID, timestamps, etc. 
    CustomerName NVARCHAR(50), 
    CustomerAddress NVARCHAR(50) 
    -- etc. 
); 

модели :

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

Цель:

То, что я бы очень хотел, чтобы быть в состоянии сказать что-то подобное для FluentAPI:

modelBuilder<Customer>().ColumnPrefix("Customer"); 
// handle only unconventional field names here 
// instead of having to map out column names for every column 

ответ

2

С model-based code-first conventions этого стало очень просто. Просто создать класс, который реализует IStoreModelConvention ...

class PrefixConvention : IStoreModelConvention<EdmProperty> 
{ 
    public void Apply(EdmProperty property, DbModel model) 
    { 
     property.Name = property.DeclaringType.Name + property.Name; 
    } 
} 

... и добавить его к конвенциям в OnModelCreating:

modelBuilder.Conventions.Add(new PrefixConvention()); 
+0

Спасибо. Я быстро ее снял, но позже придется прорыть. Вопрос: Я не использую модель EDMX, просто POCOs и текущую конфигурацию API с инициализацией db. Является ли это все еще применимым без моделей EDMX (я спрашиваю, потому что я вижу EdmProperty, с которым я не знаком). – jleach

+0

Более того, он может * использоваться только * с кодовым первым :) Но в фоновом режиме EF всегда создает EDM (Entity Data Model), отсюда и название EdmProperty. –

+0

Отлично. Это выглядит великолепно - я на самом деле не ожидал ответа на этот вопрос, поэтому я очень рад его видеть! – jleach