【问题标题】:Entity Framework Database first multiple schemas duplicate table names实体框架数据库第一个多个模式重复表名
【发布时间】:2016-03-24 16:44:15
【问题描述】:

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

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

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

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

有什么建议或链接吗?

【问题讨论】:

  • 我知道在代码中你可以使用 ToTable("Table","Schema");不确定 edmx 等价物是什么。
  • 我正在研究 EntityFramework-Reverse-POCO-Code-First-Generator ,它可以选择以模式名称作为前缀。另一种选择是创建单独的上下文,但似乎 RI 检查不同模式中的表会导致问题。

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


【解决方案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

【讨论】:

  • Entity Framework Database first not code first, this answer is not related to this question
  • 阅读他添加的评论“我正在调查 EntityFramework-Reverse-POCO-Code-First-Generator” - 是的,他应该修改了这个问题。
  • @SteveGreene 数据库优先方法怎么样?
  • 可能是this?请参阅 TableSchemaModelAdapter 部分。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-16
  • 1970-01-01
  • 2013-01-31
  • 1970-01-01
  • 2011-08-27
相关资源
最近更新 更多