我正在使用具有多个架构的现有数据库。此外,不同的模式重复表名称。 Code First部署不是一种选择。
在生成我的edmx时,我遇到了多个问题,但我关注的主要问题是命名约定 - 我希望为所有实体添加模式名称前缀,除非模式名称是dbo。
例如,我在emp模式和dbo模式中都有一个Person表,我想要有两个实体 - emp_Person和Person。
我知道可以添加前缀(我在codeplex找到了一个示例),但看起来它总是会在任何地方应用相同的前缀。
有任何建议或链接吗?
答案 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.
}