Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Entity framework 如何使用MigratorScriptingDecorator.ScriptUpdate_Entity Framework - Fatal编程技术网

Entity framework 如何使用MigratorScriptingDecorator.ScriptUpdate

Entity framework 如何使用MigratorScriptingDecorator.ScriptUpdate,entity-framework,Entity Framework,我知道这在其他连锁店中也有所涉及,但即使在将其添加到我的需求中之后,我仍然存在一些问题。正如你们中的许多人所知,文档实际上是不存在的。因此,我们非常感谢您的帮助 我试图创建一个泛型方法,它仅从包含EF实体的DLL生成一个DB脚本。然后,我传递一个DLL路径和App.config中定义的连接字符串的名称。第一次通过时,脚本生成良好。我在SQLServer Studio中运行它,它会生成所有表等。但是,当我第二次运行它时(DB存在),它在ScriptUpdate方法上失败,出现以下错误: 无法为应用

我知道这在其他连锁店中也有所涉及,但即使在将其添加到我的需求中之后,我仍然存在一些问题。正如你们中的许多人所知,文档实际上是不存在的。因此,我们非常感谢您的帮助

我试图创建一个泛型方法,它仅从包含EF实体的DLL生成一个DB脚本。然后,我传递一个DLL路径和App.config中定义的连接字符串的名称。第一次通过时,脚本生成良好。我在SQLServer Studio中运行它,它会生成所有表等。但是,当我第二次运行它时(DB存在),它在ScriptUpdate方法上失败,出现以下错误:

无法为应用程序配置中指定的DbContext类型“AdminovateLibrary.Repository.EntityDbContext,Adminovate.AdminovateLibrary项目”设置类型为“Disabled”的数据库初始值设定项。有关详细信息,请参见内部异常

内部异常是:“无法加载文件或程序集‘MyLibrary’或其依赖项之一。系统找不到指定的文件。”:“MyLibrary”

我假设,如果DLL包含与第一次运行时完全相同的代码,则该方法应该生成一个空字符串。然而,即使我用修改过的DLL运行它,它也会给我同样的错误

我的代码如下:

    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;
}
返回配置;
}