Я хотел бы реализовать собственную стратегию инициализации базы данных, чтобы я мог сгенерировать схему базы данных и применить ее к СУЩЕСТВУЮЩЕЙ ПУСТОЙ СУБД SQL, используя предоставленный идентификатор пользователя и пароль.
К сожалению, встроенные стратегии не обеспечивают то, что Im ищет:
// 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>());
Я разработал следующее, но это не создает ModelHash, поэтому я не могу использовать "context.Database.ModelMatchesDatabase()" , чтобы проверить, что была создана схема базы данных, и предотвратить множественные инициализации
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();
}
}
Вопросы:
Кто-нибудь знает, как я могу получить/создать хэш модели? (который является объектом EdmMetadata)
-Или -
Есть ли лучший способ сделать это в общем случае с помощью Code First CTP?