实体框架4.3迁移现有的“共享”数据库

时间:2012-05-17 19:41:15

标签: entity-framework database-schema entity-framework-4.3 ef-migrations

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

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

请帮忙。

2 个答案:

答案 0 :(得分:1)

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

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

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

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

答案 1 :(得分:1)

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

相关问题