将列名称约定添加到 EF6 FluentAPI

Add Column Name Convention to EF6 FluentAPI

这个问题是 4 年前在这里提出的:EF Mapping to prefix all column names within a table 我希望现在有更好的处理方式。

我使用的是 EF6 Fluent API,我称之为无迁移代码优先。我的模型有 POCO,我的大部分数据库列名称定义为 [SingularTableName]Field(例如,CustomerAddress 数据库列映射到 Customers POCO 中的地址字段)

Table:

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<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

使用 model-based code-first conventions 这变得非常简单。只需创建一个实现 IStoreModelConvention ...

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

... 并将其添加到 OnModelCreating:

中的约定中
modelBuilder.Conventions.Add(new PrefixConvention());