Entity framework 如何使用MigratorScriptingDecorator.ScriptUpdate
我知道这在其他连锁店中也有所涉及,但即使在将其添加到我的需求中之后,我仍然存在一些问题。正如你们中的许多人所知,文档实际上是不存在的。因此,我们非常感谢您的帮助 我试图创建一个泛型方法,它仅从包含EF实体的DLL生成一个DB脚本。然后,我传递一个DLL路径和App.config中定义的连接字符串的名称。第一次通过时,脚本生成良好。我在SQLServer Studio中运行它,它会生成所有表等。但是,当我第二次运行它时(DB存在),它在ScriptUpdate方法上失败,出现以下错误: 无法为应用程序配置中指定的DbContext类型“AdminovateLibrary.Repository.EntityDbContext,Adminovate.AdminovateLibrary项目”设置类型为“Disabled”的数据库初始值设定项。有关详细信息,请参见内部异常 内部异常是:“无法加载文件或程序集‘MyLibrary’或其依赖项之一。系统找不到指定的文件。”:“MyLibrary” 我假设,如果DLL包含与第一次运行时完全相同的代码,则该方法应该生成一个空字符串。然而,即使我用修改过的DLL运行它,它也会给我同样的错误 我的代码如下:Entity framework 如何使用MigratorScriptingDecorator.ScriptUpdate,entity-framework,Entity Framework,我知道这在其他连锁店中也有所涉及,但即使在将其添加到我的需求中之后,我仍然存在一些问题。正如你们中的许多人所知,文档实际上是不存在的。因此,我们非常感谢您的帮助 我试图创建一个泛型方法,它仅从包含EF实体的DLL生成一个DB脚本。然后,我传递一个DLL路径和App.config中定义的连接字符串的名称。第一次通过时,脚本生成良好。我在SQLServer Studio中运行它,它会生成所有表等。但是,当我第二次运行它时(DB存在),它在ScriptUpdate方法上失败,出现以下错误: 无法为应用
public string GenerateUpdateSchemaScript( string sourceDllFilePath, string targetConnectionName ) {
var dbMigrationsConfiguration = CreateConfiguration( sourceDllFilePath, targetConnectionName );
var dbMigrator = new DbMigrator( dbMigrationsConfiguration );
Database.SetInitializer( new CreateDatabaseIfNotExists<DbContext>() );
var scriptor = new MigratorScriptingDecorator( dbMigrator );
var script = scriptor.ScriptUpdate( null, null );
return RemoveCreateMigrationHistoryTable( dbMigrationsConfiguration, script );
}
private static DbMigrationsConfiguration CreateConfiguration2( string sourceDllFilePath, string targetConnectionName ) {
var assembly = Assembly.LoadFrom( sourceDllFilePath );
var configType = assembly.GetTypes().Single( type => typeof( DbMigrationsConfiguration ).IsAssignableFrom( type ) );
var configuration = ( DbMigrationsConfiguration )assembly.CreateInstance( configType.FullName );
if( configuration != null ) {
configuration.ContextType = assembly.GetTypes().Single( type => type.BaseType == typeof( DbContext ) );
configuration.MigrationsAssembly = assembly;
configuration.TargetDatabase = new DbConnectionInfo( targetConnectionName );
configuration.AutomaticMigrationsEnabled = true;
configuration.AutomaticMigrationDataLossAllowed = true;
}
return configuration;
}
public string GenerateUpdateSchemaScript(string sourceDllFilePath,string targetConnectionName){
var dbmigrionsconfiguration=CreateConfiguration(sourceDllFilePath,targetConnectionName);
var dbMigrator=新的dbMigrator(DBMIGRIONSConfiguration);
SetInitializer(新的CreateDatabaseIfNotExists());
var scriptor=new MigratorScriptingDecorator(dbMigrator);
var script=scriptor.ScriptUpdate(null,null);
返回RemoveCreateMigrationHistoryTable(dbmigOptionsConfiguration,脚本);
}
专用静态DBMigOptionsConfiguration CreateConfiguration2(字符串sourceDllFilePath,字符串targetConnectionName){
var assembly=assembly.LoadFrom(sourceDllFilePath);
var configType=assembly.GetTypes().Single(type=>typeof(dbmigrionisconfiguration).IsAssignableFrom(type));
var configuration=(dbmigtorinsconfiguration)assembly.CreateInstance(configType.FullName);
if(配置!=null){
configuration.ContextType=assembly.GetTypes().Single(type=>type.BaseType==typeof(DbContext));
configuration.migrationassembly=程序集;
configuration.TargetDatabase=新的DbConnectionInfo(targetConnectionName);
configuration.AutomaticMigrationsEnabled=true;
configuration.AutomaticMigrationDataLossAllowed=true;
}
返回配置;
}