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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了实体框架数据库首先是多个模式重复的表名相关的知识,希望对你有一定的参考价值。

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

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

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

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

有什么建议或链接吗?

答案

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

以上是关于实体框架数据库首先是多个模式重复的表名的主要内容,如果未能解决你的问题,请参考以下文章

创建实体时的表名(包含/正则表达式) - 实体框架 - 表前缀

具有多个 MySql 模式的实体框架多个 DbContext

如何自定义与 EDMX(模型优先)实体框架 4.1 一起使用的表名?

实体框架核心关系问题(代码优先) - 重复列

Rails Postgresql 多个模式和相同的表名

如何使用带有代码优先实体框架的 UnitOfWork 模式防止重复条目?