替换实体映射中的下划线



当使用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似乎有些多余。似乎我只想对edmx文件进行后处理,而不使用T4模板,因为在替换之后,我想要默认行为。哪种方法是最合适的,为什么?

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

我会使用开箱即用的功能,除非我正在处理非常大的数量的表。花费时间让T4模板做您所需要的事情可能不值得。

对于小型数据库,如果先做数据库开发,我会坚持使用设计器。

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

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的新书《编程实体框架:代码优先》非常棒!

最新更新