2

我们有一个庞大的数据库,其中包含用于不同 Web 应用程序的不同数据库模式。例如:WebApp1 使用 Schema1.Tables。WebApp2 使用 Schema2.Tables 等等。

现在,我正在开发一个新的 Web 应用程序 (WepApp3),它将使用 Entity Framework 4.3.1。WebApp3 应该只关心 Schema3 并且只使用那些属于 Schema3 的数据库对象。如果我在 WepApp3 中创建一些实体,如何将这些实体作为 schema3.tables 迁移到数据库?我还需要进行初始迁移吗?

请帮忙。

4

2 回答 2

1

我认为在同一个数据库中不可能有多个 EF 模型。EF 不应尝试接触与其模型无关的表,但如果您想将另一个 EF 应用程序添加到同一个数据库中,您会遇到麻烦,因为它们会尝试共享相同的 MetaData 表。

使用代码优先生成新模型时,您可以指定它们应属于 DbContext 的哪个模式:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Entity<MyEntity>().ToTable("MyEntity", "Schema3");
}

如果没有共享应用程序,是否可以将架构迁移到不同的数据库中?

于 2012-05-17T19:54:04.843 回答
1

它似乎工作。我从一个现有的数据库开始。创建了一个带有几个模型的 mvc 应用程序( app1 )。然后我在数据库中为这个应用程序创建了一个模式。我根据您的评论为模型指定了架构。然后我使用基于代码的迁移脚本来更新数据库。迁移脚本在新架构下创建了 2 个表,而不会破坏现有内容。我注意到 EF 创建了带有更改信息行的 __MigrationHistory 表。然后我创建了另一个应用程序,一个新架构并重复了迁移过程,并对迁移脚本进行了一些调整。该脚本具有重新创建 2 个app1表的代码. 我从脚本中删除了该代码。然后,EF 成功地在新架构下创建了新表,并在 __MigrationHistory 表中创建了新行,其中包含有关新更改的信息。所有现有的东西都保持不变,包括数据。

于 2012-05-18T14:50:23.583 回答