Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Entity framework 实体框架数据库第一个多个模式重复表名_Entity Framework_Entity Framework 6_Ef Database First - Fatal编程技术网

Entity framework 实体框架数据库第一个多个模式重复表名

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在幕后

我正在使用一个具有多个模式的现有数据库。此外,不同的模式会复制表名。代码优先部署不是一个选项

在生成edmx时,我遇到了多个问题,但我关心的主要问题是命名约定——除非模式名是dbo,否则我想用模式名作为所有实体的前缀

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

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


任何建议或链接?

代码优先可以满足您的需要。如您所述,为类添加前缀,然后让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部分。