2016-04-29 1 views
0

同じSQL Server 2012データベースに書き込む独自のDbContextクラスを持つ2つのプロジェクトがあります。コードデフォルトのスキーマを設定すると複数のDbContextを持つ最初の移行が失敗する

DbContextクラスの形式は次のとおりです。

コードファーストの移行を使用して
public class BlogDbContext : DbContext 
{ 
    public BlogDbContext() 
     : base("CodeFirstTestConnString") 
    { 
    } 

    public BlogDbContext(string connectionString) 
     : base(connectionString) 
    { 
    } 

    public DbSet<Blog> Blogs { get; set; } 
    public DbSet<Post> Posts { get; set; } 

    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     //modelBuilder.HasDefaultSchema("blogtest"); 
    } 
} 

私はプロジェクトごとに次のように実行することにより、(既存の)データベースに私のテーブルを作成することができます

Enable-Migrations 
Add-Migration Initial 
Update-Database 

これをしかし、上記のコメント行を追加してデフォルトスキーマを設定すると(両方のプロジェクトで同じスキーマが使用されます)、Update-Databaseは2番目のプロジェクトでエラーが発生します。「既に__MigrationHistoryという名前のオブジェクトがデータベース "。

"Update-Database -Verbose"を実行すると、デフォルトスキーマが変更された場合、2番目のプロジェクトに対して「CREATE TABLE [blogtest]。[__ MigrationHistory]」が実行されていることがわかります。デフォルトのスキーマを変更しないと、初めてこのテーブルを作成しようとします。

これはEntity Frameworkのバグですか、何か不足していますか?

答えて

0

これはCodeplexでEF6のバグとして報告されています。

https://entityframework.codeplex.com/workitem/1685

回避策デフォルトのスキーマを設定するには、カスタムHistoryContextを使用することがあり示さ:

internal sealed class Configuration : DbMigrationsConfiguration<ConsoleApplication11.MyContext> 
{ 
    public Configuration() 
    { 
     AutomaticMigrationsEnabled = false; 

     SetHistoryContextFactory("System.Data.SqlClient", (c, s) => new MyHistoryContext(c, s)); 
    } 
} 

internal class MyHistoryContext : HistoryContext 
{ 
    public MyHistoryContext(DbConnection existingConnection, string defaultSchema) : base(existingConnection, defaultSchema) 
    { 
    } 

    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     base.OnModelCreating(modelBuilder); 

     modelBuilder.HasDefaultSchema("foo"); 
    } 
} 
関連する問題