Entity framework 实体框架数据库第一个多个模式重复表名
我正在使用一个具有多个模式的现有数据库。此外,不同的模式会复制表名。代码优先部署不是一个选项 在生成edmx时,我遇到了多个问题,但我关心的主要问题是命名约定——除非模式名是dbo,否则我想用模式名作为所有实体的前缀 例如,我在emp模式和dbo模式中都有一个Person表,我想有两个实体——emp_Person和Person 我知道添加前缀是可能的(我在上找到了一个例子),但看起来它总是在任何地方应用相同的前缀Entity framework 实体框架数据库第一个多个模式重复表名,entity-framework,entity-framework-6,ef-database-first,Entity Framework,Entity Framework 6,Ef Database First,我正在使用一个具有多个模式的现有数据库。此外,不同的模式会复制表名。代码优先部署不是一个选项 在生成edmx时,我遇到了多个问题,但我关心的主要问题是命名约定——除非模式名是dbo,否则我想用模式名作为所有实体的前缀 例如,我在emp模式和dbo模式中都有一个Person表,我想有两个实体——emp_Person和Person 我知道添加前缀是可能的(我在上找到了一个例子),但看起来它总是在任何地方应用相同的前缀 任何建议或链接?代码优先可以满足您的需要。如您所述,为类添加前缀,然后让EF在幕后
任何建议或链接?代码优先可以满足您的需要。如您所述,为类添加前缀,然后让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; }
...
}
现在只需在您的上下文中使用fluent配置即可映射:
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.
}
模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder)
{
基于模型创建(modelBuilder);
modelBuilder.Entity()
.ToTable(“人”、“方案1”)
.HasKey(p=>p.PersonId);
modelBuilder.Entity()
.ToTable(“人”、“emp”)
.HasKey(p=>p.PersonId);
//关系等的其他流畅代码。
}
请参见我知道在代码中首先可以使用ToTable(“表”、“模式”);不确定edmx等价物是什么。我正在研究EntityFramework反向POCO代码第一个生成器,它可以选择使用模式名称作为前缀。另一个选项是创建单独的上下文,但不同模式下的表之间的RI检查似乎导致了问题。Entity Framework Database first不是code first,此答案与此问题无关阅读他添加的评论“我正在查看Entity Framework Reverse POCO code first Generator”-是,他应该修改这个问题。@SteveGreene数据库优先法怎么样?也许吧?请参阅TableSchemaModelAdapter部分。