2016-05-27 7 views
4

Ich versuche, Migrationen mit benutzerdefiniertem DbContext auszuführen.Stellen Sie eine Implementierung von IDbContextFactory bereit. Aber wo?

var migrationConfiguration = new DbMigrationsConfiguration { AutomaticMigrationsEnabled = true }; 
migrationConfiguration.ContextType = typeof(DataContext); 
var migrator = new DbMigrator(migrationConfiguration); 
migrator.Update(); 

Dies wirft Migration Ausnahme, weil DataContext nicht parameterlosen Konstruktor nicht implementiert:

Der Zielkontext 'System.Data.Entity.DbContext' nicht konstruierbar ist. Fügen Sie einen Standardkonstruktor hinzu oder stellen Sie eine Implementierung von IDbContextFactory bereit.

Der DataContext Konstruktor erfordert Parameter, aber ich habe schon IDbContextFactory<DataContext> erstellt. Wie sage ich DbMigrator, die vorhandene Implementierung von IDbContextFactory<DataContext> zu verwenden?

+0

Etwas anderes ist hier falsch - man beachte die ' System.Data.Entity.DbContext' (nicht 'DataContext') in der Ausnahmebedingungsnachricht. –

+0

Zeigen Sie Ihren Kontext. http://stackoverflow.com/questions/11395283/how-to-implement-idbcontextfactory-for-use-with-entity-framework-data-migrations –

Antwort

3

Die IDbContextFactory<> muss in der gleichen Baugruppe sein und parameterless Konstruktor zur Verfügung stellen.

Ein anderer Weg ist DbConfiguration und Set-Fabrik in parameterlos Konstruktor der abgeleiteten Klasse (ich verwende MEF zu erhalten Klasse abgeleitet von IDbContextFactory) zu erben:

public class DataContextConfiguration : DbConfiguration 
{ 
    public DataContextConfiguration() 
    { 
     SetContextFactory(() => (DataContext)new CompositionManager().Container.GetExportedValue<IDataContextFactory>().Create()); 
    } 
} 
+0

Mangel an parameterlosen Konstruktor war mein Problem, fügte es in es gelöst. – Mardoxx

Verwandte Themen