27 Stimmen

Entity Framework CTP 4 - Code First - Benutzerdefinierter Datenbank-Initialisierer

Ich möchte eine benutzerdefinierte Datenbankinitialisierungsstrategie implementieren, so dass ich das Datenbankschema generieren und auf eine EXISTIERENDE LEERE SQL-Datenbank mit einer bereitgestellten Benutzer-ID und einem Passwort anwenden kann.

Leider bieten die integrierten Strategien nicht das, wonach ich suche:

// The default strategy creates the DB only if it doesn't exist - but it does 
// exist so this does nothing
Database.SetInitializer(new CreateDatabaseOnlyIfNotExists<DataContext>());

// Drops and re-creates the database but then this breaks my security mapping and 
// only works if using a “Trusted" connection
Database.SetInitializer(new RecreateDatabaseIfModelChanges<DataContext>());

// Strategy for always recreating the DB every time the app is run. – no good for 
// what I want
Database.SetInitializer(new AlwaysRecreateDatabase<DataContext>());

Ich habe die folgenden ausgearbeitet, aber dies nicht die ModelHash erstellen, so dass ich nicht in der Lage bin, zu verwenden "context.Database.ModelMatchesDatabase()" um zu überprüfen, ob das Datenbankschema erstellt wurde und um mehrfache Initialisierungen zu verhindern:

public class Initializer : IDatabaseInitializer<DataContext>  
{ 
    Public void InitializeDatabase(DataContext context)  
    {       
         // this generates the SQL script from my POCO Classes
         var sql = context.ObjectContext.CreateDatabaseScript();

         // As expected - when run the second time it bombs out here with "there is already an
         // object named xxxxx in the database"
         context.ObjectContext.ExecuteStoreCommand(sql); 

         this.seed(context)
         context.SaveChanges();
    }
}  

Fragen:

Weiß jemand, wie ich den Modell-Hash abrufen/erstellen kann (der eine EdmMetadata-Entität ist)?

-Or-

Gibt es eine bessere Möglichkeit, dies generell mit dem Code First CTP zu tun?

-2voto

Craig Stuntz Punkte 124703

En Entity Designer Datenbankgenerierung Power Pack wird dies tun. Ich bin nicht sicher, ob es mit Code First funktioniert, aber einen Versuch ist es wert.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X