【问题标题】:Add Column Name Convention to EF6 FluentAPI将列名称约定添加到 EF6 FluentAPI
【发布时间】:2017-04-02 04:11:51
【问题描述】:

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

我正在使用 EF6 Fluent API,我将其称为 Code First without Migrations。我的模型有 POCO,并且我的大多数数据库列名称都定义为 [SingularTableName]Field(例如,CustomerAddress db 列映射到 Customers POCO 中的 Address 字段)

表格:

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

【问题讨论】:

    标签: entity-framework entity-framework-6 ef-fluent-api


    【解决方案1】:

    有了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());
    

    【讨论】:

    • 谢谢。我快速浏览了它,但稍后将不得不深入挖掘。问题:我没有使用 EDMX 模型,只是 POCO 和 db 初始化关闭的 fluent API 配置。如果没有 EDMX 模型,这是否仍然适用(我问是因为我看到了 EdmProperty,我不熟悉副手)。
    • 更重要的是,它只能用于代码优先:) 但是在后台,EF 总是构建一个 EDM(实体数据模型),因此命名为 EdmProperty。
    • 优秀。这看起来很棒 - 我真的没想到会有答案,所以我很高兴看到它!
    • 添加这个后运行add-migration时我有一堆Name: Each property name in a type must be unique. Property name ... is already defined.
    • @Toolkit 请提出一个新问题,以便提供所有必需的详细信息。
    猜你喜欢
    • 2017-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多