.net 使用自定义连接字符串的EF 6编程迁移

14ifxucb  于 2023-11-20  发布在  .NET
关注(0)|答案(5)|浏览(179)

我有一个启用了迁移的EF6代码优先实现和一个单一的初始迁移。我创建了一个方法来以编程方式运行迁移,如下所示:

  1. public void RunMigration()
  2. {
  3. var migrationConfiguration = new DataAccess.Migrations.Configuration();
  4. var migrator = new System.Data.Entity.Migrations.DbMigrator(migrationConfiguration);
  5. migrator.Update();
  6. }

字符串
当我开始测试时,我在App.exe中配置了几个连接字符串。我的问题:

如何告诉DbMigrator使用什么连接字符串?

update:我想catch是在不扩展DbMigrator的情况下完成的。

xzabzqsa

xzabzqsa1#

我用

  1. var migrator = new DbMigrator(new DbMigrationsConfiguration { TargetDatabase = new DbConnectionInfo("MyConnectionStringHere")});
  2. migrator.Update();

字符串

1tuwyuhd

1tuwyuhd2#

因此,除非有人能给出更好的答案:在EF6中,从EF 6.1.3开始就没有工作方法来为编程数据库迁移指定运行时连接字符串。我想我唯一能看到的是,我需要生成一个sql脚本,并在数据库设置时以编程方式运行它。这方面的问题是,我要么必须在文本中编译,要么必须用二进制文件部署它。

8qgya5xd

8qgya5xd3#

看起来你会把migrationConfiguration.TargetDatabase设置为DbConnectionInfo
DbConnectionInfo的构造函数之一接受连接字符串。
看起来实际使用它的最简单方法是修改DataAccess.Migrations.Configuration类,使其使用带有连接字符串的构造函数。

z3yyvxxp

z3yyvxxp4#

可以设置dbConnectionInfo:

  1. migrationConfiguration.TargetDatabase = new DbConnectionInfo(connectionString);

字符串
完整代码:

  1. public void RunMigration(string connectionString)
  2. {
  3. var migrationConfiguration = new DataAccess.Migrations.Configuration();
  4. migrationConfiguration.TargetDatabase = new DbConnectionInfo(connectionString);
  5. var migrator = new System.Data.Entity.Migrations.DbMigrator(migrationConfiguration);
  6. migrator.Update();
  7. }

Importan!:说明你没有在dbContext初始化器中设置连接名。

展开查看全部
n3schb8v

n3schb8v5#

我最近需要这样做,我的解决方案是创建一个自定义的Configuration类。完整的代码库对我来说非常好。

  1. public class Configuration : DbMigrationsConfiguration<Context>
  2. {
  3. public void Init()
  4. {
  5. AutomaticMigrationsEnabled = false;
  6. AutomaticMigrationDataLossAllowed = true;
  7. }
  8. public Configuration()
  9. {
  10. Init();
  11. }
  12. protected override void Seed(Context context)
  13. {
  14. // This method will be called after migrating to the latest version.
  15. // You can use the DbSet<T>.AddOrUpdate() helper extension method
  16. // to avoid creating duplicate seed data.
  17. }
  18. public static void UpdateDatabase()
  19. {
  20. try
  21. {
  22. var config = new Configuration();
  23. UpdateDatabase(config);
  24. }
  25. catch (Exception ex)
  26. {
  27. logger.writeLog("UpdateDatabase", ex);
  28. }
  29. }
  30. public Configuration(DbConnectionInfo db)
  31. {
  32. Init();
  33. TargetDatabase = db;
  34. }
  35. public static void UpdateDatabase(DbConnectionInfo db)
  36. {
  37. try
  38. {
  39. var config = new Configuration(db);
  40. UpdateDatabase(config);
  41. }
  42. catch (Exception ex)
  43. {
  44. logger.writeLog("UpdateDatabase", ex);
  45. }
  46. }
  47. private static void UpdateDatabase(Configuration config)
  48. {
  49. var migrator = new DbMigrator(config);
  50. var pending = migrator.GetPendingMigrations();
  51. if (pending.Count() > 0)
  52. migrator.Update();
  53. }
  54. }

字符串
}
这提供了使用DataContext中指定的连接字符串的默认值以及传递连接的选项。
默认呼叫

  1. Configuration.UpdateDatabase();


使用传递连接信息的路由器

  1. var offlineCon = new System.Data.Entity.Infrastructure.DbConnectionInfo("connection string","provider");
  2. Configuration.UpdateDatabase(offlineCon);


其中连接字符串是您的特定连接字符串,提供数据提供程序,例如System.Data.SqlClient

展开查看全部

相关问题