实体框架数据库首先是多个模式重复的表名

时间:2016-03-24 16:44:16

标签: entity-framework entity-framework-6 ef-database-first

我正在使用具有多个架构的现有数据库。此外,不同的模式重复表名称。 Code First部署不是一种选择。

在生成我的edmx时,我遇到了多个问题,但我关注的主要问题是命名约定 - 我希望为所有实体添加模式名称前缀,除非模式名称是dbo。

例如,我在emp模式和dbo模式中都有一个Person表,我想要有两个实体 - emp_Person和Person。

我知道可以添加前缀(我在codeplex找到了一个示例),但看起来它总是会在任何地方应用相同的前缀。

有任何建议或链接吗?

1 个答案:

答案 0 :(得分:1)

Code First可以满足您的需求。在提到时为您的类添加前缀,然后让EF处理幕后的映射。您可以在单个上下文中执行此操作:

public class Person
{
    public int PersonId { get; set; }
    public string LastName { get; set; }
    public string FirstName { get; set; }
    ...
}

public class empPerson
{
    public int PersonId { get; set; }
    public string LastName { get; set; }
    public string FirstName { get; set; }
    ...
}

现在只需在您的上下文中使用流畅的配置来映射:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    base.OnModelCreating(modelBuilder);

    modelBuilder.Entity<Person>()
       .ToTable("Person", "schema1")
       .HasKey(p => p.PersonId);

    modelBuilder.Entity<empPerson>()
       .ToTable("Person", "emp")
       .HasKey(p => p.PersonId);

    // other fluent code for relationships, etc.
}

请参阅https://msdn.microsoft.com/en-us/data/jj591617.aspx#2.3