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

问题描述 投票:2回答:1

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

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

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

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

有什么建议或链接吗?

entity-framework entity-framework-6 ef-database-first
1个回答
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

© www.soinside.com 2019 - 2024. All rights reserved.