替换实体映射中的下划线

时间:2011-12-20 21:04:45

标签: .net entity-framework-4 entity edmx database-first

当使用EF4创建模型时,我想替换所有下划线以及表/列前缀,以便模型干净利落地读取。我们的数据库有一个类似的结构:

Table:ABC_Customer
-Column:ABC_Customer_Id
-Column:Name
-Column:ABC_Customer_Type_Id

Table:ABC_Customer_Type
-Column:ABC_Customer_Type_Id
-Column:Name

我想拥有像这样的实体名称:

Entity:Customer
-Property:CustomerId
-Property:Name
-Property:CustomerTypeId
-NavigationProperty:CustomerType

依旧等等。

生成edmx文件时,EF设计器会将所有实体命名为与数据库中显示的完全相同。我知道可以使用T4模板修改此行为,但我发现我可以重命名设计器中的实体,这会在edmx文件中生成EntitySetMapping元素,因此T4看起来有点过分。看起来我只是想在不使用T4模板的情况下对edmx文件进行后期处理,因为在更换之后,我想要默认行为。哪种方法最合适?为什么?

2 个答案:

答案 0 :(得分:1)

EDMX负责映射,任何新名称都应在映射=在EDMX中定义。

答案 1 :(得分:0)

我会使用开箱即用的功能,除非我处理的是非常大的数量的表。让T4模板完全按照您的需要进行操作的时间投入可能不值得。

对于小型数据库,如果进行数据库优化开发,我会坚持使用设计器。

或者,您可以先使用代码来获得您想要的干净模型,将其指向现有数据库并处理模型中每个对象的代码映射:

public class CustomerConfiguration : EntityTypeConfiguration<Customer>
{
    public CustomerConfiguration()
    {
        Property(t => t.CustomerId).HasColumnName("ABC_Customer_Id");
        ...
    }
}

然后在更改表映射的同时将自定义配置(即映射)应用于模型:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Configurations.Add(new CustomerConfiguration());

    modelBuilder.Entity<Customer>().ToTable("ABC_Customer");
}

我使用它的次数越多,我就越喜欢代码。 Julie Lerman的新书Programming Entity Framework: Code First很棒!