gpt4 book ai didi

entity-framework - EntityFramework 代码优先的自定义连接字符串和迁移

转载 作者:行者123 更新时间:2023-12-03 11:15:24 26 4
gpt4 key购买 nike

当我使用默认连接字符串(从 app.config 读取)创建上下文时,会创建数据库并且迁移工作 - 基本上一切正常。而当以编程方式创建连接字符串时(使用 SqlConnectionStringBuilder ):

  • 当数据库不存在时不创建数据库(场景 A);
  • CreateDbIfNotExists()创建最新版本的数据库模型,但不调用迁移机制(场景 B)。

  • A当我希望访问数据库时会抛出异常,因为 - 显然 - 它不存在。在 B数据库创建正确,不会调用迁移机制,就像标准连接字符串中的情况一样。

    app.config :
    " Data Source=localhost\\SQLEXPRESS;Initial Catalog=Db13;User ID=xxx;Password=xxx"

    建筑商 :
    sqlBuilder.DataSource = x.DbHost;
    sqlBuilder.InitialCatalog = x.DbName;
    sqlBuilder.UserID = x.DbUser;
    sqlBuilder.Password = x.DbPassword;

    初始化程序 :
    Database.SetInitializer(
    new MigrateDatabaseToLatestVersion<
    MyContext,
    Migrations.Configuration
    >()
    );

    规范 :
    Entity Framework :5.0,数据库:SQL Server Express 2008

    最佳答案

    如果您的迁移工作不正常,请尝试设置 Database.Initialize(true)在 DbContext ctor中。

    public CustomContext(DbConnection connection)
    : base(connection, true)
    {
    Database.Initialize(true);
    }

    我有类似的迁移问题。在我的解决方案中,我必须始终在 ctor 中设置数据库初始值设定项,如下所示
    public CustomContext(DbConnection connection)
    : base(connection, true)
    {
    Database.SetInitializer(new CustomInitializer());
    Database.Initialize(true);
    }

    在自定义初始值设定项中,您必须实现 InitalizeDatabase(CustomContex context)方法,例如。
    class CustomInitializer : IDatabaseInitializer<CustomContext>
    {
    public void InitializeDatabase(CustomContext context)
    {
    if (!context.Database.Exists || !context.Database.CompatibleWithModel(false))
    {
    var configuration = new Configuration();
    var migrator = new DbMigrator(configuration);
    migrator.Configuration.TargetDatabase = new DbConnectionInfo(context.Database.Connection.ConnectionString, "System.Data.SqlClient");
    var migrations = migrator.GetPendingMigrations();
    if (migrations.Any())
    {
    var scriptor = new MigratorScriptingDecorator(migrator);
    string script = scriptor.ScriptUpdate(null, migrations.Last());
    if (!String.IsNullOrEmpty(script))
    {
    context.Database.ExecuteSqlCommand(script);
    }
    }
    }
    }
    }

    更新

    关于entity-framework - EntityFramework 代码优先的自定义连接字符串和迁移,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15504465/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com