0

使用 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 模板,因为在替换之后,我想要默认行为。哪种方法最合适,为什么?

4

2 回答 2

1

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

于 2011-12-20T21:10:12.660 回答
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很棒!

于 2011-12-21T12:54:30.283 回答