2016-10-04 11 views
1

私は、SqlServerとSQLiteの両方のデータベースを作成するために使用される共有モデルを持っています。私は私のモデルクラスの各1上に表属性を追加し、スキーマを供給:移行中にSQLiteのスキーマ属性を無視しますか?

[Table("Sites", Schema = "Common")] 

私はcontext.Database.Migrate()を使用してSQLiteデータベースを移行する場合、私は非サポート例外エラーが発生します。私はSQLiteがスキーマをサポートしていないことを知っていますので、移行中にスキーマ属性を無視する簡単な方法があるのだろうかと思いました。

+0

このスレッドを参照してください:http://stackoverflow.com/questions/39111308/can-entity-framework-core-code-migrations-work-reliably-and-practically-againstをしての属性を使用して回避しようスキーマ関連の構成 –

+0

これは予期しないことです。一般に、スキーマはSQLite上で無視されるべきです。私は問題[#6679](https://github.com/aspnet/EntityFramework/issues/6679)を提出しました。 – bricelam

答えて

0

スキーマを属性ではなくコードで設定します。あなたは、たとえば、スキーマを決定するために、いくつかの方法/設定を使用することができますこの方法:

public class MyContext 
{ 
    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     if(UsingSqlLite) 
     { 
      modelBuilder.Entity<Site>().ToTable("Sites"); 
     } 
     else 
     { 
      modelBuilder.Entity<Site>().ToTable("Sites", "Common"); 
     } 
    } 

    //snip 
} 
0

あなたはSQL ServerとSQLiteの両方で同じ移行を使用しているので、あなたはおそらく、移行の内側にスキーマを無視する必要があります。

protected override void Up(MigrationBuilder migrationBuilder) 
{ 
    if (migrationBuilder.ActiveProvider == "Microsoft.EntityFrameworkCore.Sqlite") 
    { 
     migrationBuilder.CreateTable(
      name: "Sites", 
      ...); 
    } 
    else 
    { 
     migrationBuilder.CreateTable(
      name: "Sites", 
      schema: "Common", 
      ...); 
    } 
} 
+0

SQLiteのバージョンを変更してスキーマを削除し、データベースを正常に移行しました。 'そのようなテーブルはありません:Common.Sites' – VorSiechtIP

+1

SQLiteプロバイダはバージョン2.0.0のスキーマを無視して、マルチプロバイダシナリオを簡単にします。 https://github.com/aspnet/EntityFramework/issues/6679 – spottedmahn

関連する問題