2016-10-04 4 views
1

Ich habe ein gemeinsames Modell, mit dem sowohl SqlServer- als auch SQLite-Datenbanken erstellt werden. Ich habe das Tabellenattribut auf jedem meiner Modellklassen und lieferte ein Schema:Schemaattribut für SQLite während der Migration ignorieren?

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

Wenn ich die SQLite-Datenbank mit context.Database.Migrate() migrieren, erhalte ich einen NotSupportedException Fehler. Ich weiß, dass SQLite keine Schemas unterstützt. Daher habe ich mich gefragt, ob es eine einfache Möglichkeit gibt, das Schemaattribut während der Migration zu ignorieren.

+0

dieses Thema Siehe: http://stackoverflow.com/questions/39111308/can-entity-framework-core-code-migrations-work-reliably-and-practically-against und versuchen, für die Verwendung von Attributen zu vermeiden Schema-bezogene Konfiguration. –

+0

Das ist unerwartet. Im Allgemeinen sollte das Schema in SQLite ignoriert werden. Ich habe das Problem [# 6679] (https://github.com/aspnet/EntityFramework/issues/6679) eingereicht. – bricelam

Antwort

0

Legen Sie das Schema in Code und nicht nach Attribut fest. Auf diese Weise können Sie eine Methode/config verwenden das Schema, zum Beispiel zu bestimmen:

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

Da Sie die gleiche Migration auf SQL Server und SQLite verwenden, müssen Sie wahrscheinlich das Schema in der Migration ignorieren.

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

Ich habe die SQLite-Version geändert, um das Schema zu entfernen, und es migriert die Datenbank erfolgreich. Ich bekomme jetzt ein Problem, wenn ich eine Abfrage durchführe, sagt es 'keine solche Tabelle: Common.Sites' – VorSiechtIP

+1

Der SQLite-Anbieter wird Schemas in Version 2.0.0 ignorieren, die multi-provider-Szenarien erleichtern. https://github.com/aspnet/EntityFramework/issues/6679 – spottedmahn

Verwandte Themen