EF Code First MigrateDatabaseToLatestVersion 接受配置中的连接字符串名称

2024-01-17

在尝试在我的项目中实现 EF 迁移时,我陷入了困境。

EF Code First MigrateDatabaseToLatestVersion 接受配置中的连接字符串名称。

在我的例子中,数据库名称在运行时已知(用户从下拉列表中选择它)。 正如 DbContext 在其构造函数中接受 ConnectionString 或 connectionString Name 的方式一样,“MigrateDatabaseToLatestVersion”不接受相同的内容

System.Data.Entity.Database.SetInitializer
(new MigrateDatabaseToLatestVersion<SrcDbContext, SRC.DomainModel.ORMapping.Migrations.Configuration>(connString));

还有其他方法可以实现这一目标吗?


谢谢你们。我确实从codeplex上签出了EF代码,并在了解了他们的源代码后继承了我自己的类。这是我选择的解决方案:-

public class MigrateDbToLatestInitializerConnString<TContext, TMigrationsConfiguration> : IDatabaseInitializer<TContext>
        where TContext : DbContext
        where TMigrationsConfiguration : DbMigrationsConfiguration<TContext>, new()
    {
        private readonly DbMigrationsConfiguration config;

        /// <summary>
        ///     Initializes a new instance of the MigrateDatabaseToLatestVersion class.
        /// </summary>
        public MigrateDbToLatestInitializerConnString()
        {
            config = new TMigrationsConfiguration();
        }

        /// <summary>
        ///     Initializes a new instance of the MigrateDatabaseToLatestVersion class that will
        ///     use a specific connection string from the configuration file to connect to
        ///     the database to perform the migration.
        /// </summary>
        /// <param name="connectionString"> connection string to use for migration. </param>
        public MigrateDbToLatestInitializerConnString(string connectionString)
        {
            config = new TMigrationsConfiguration
                          {
                              TargetDatabase = new DbConnectionInfo(connectionString, "System.Data.SqlClient")
                          };
        }

        public void InitializeDatabase(TContext context)
        {
            if (context == null)
            {
                throw new ArgumentException("Context passed to InitializeDatabase can not be null");
            }

            var migrator = new DbMigrator(config);

            migrator.Update();
        }
    }

 public static class DatabaseHelper
    {
        /// <summary>
        /// This method will create data base for given parameters supplied by caller.
        /// </summary>
        /// <param name="serverName">Name of the server where database has to be created</param>
        /// <param name="databaseName">Name of database</param>
        /// <param name="userName">SQL user name</param>
        /// <param name="password">SQL password</param>
        /// <returns>void</returns>
        public static bool CreateDb(string serverName, string databaseName, string userName, string password)
        {
            bool integratedSecurity = !(!string.IsNullOrEmpty(userName) || !string.IsNullOrEmpty(password));

            var builder = new System.Data.SqlClient.SqlConnectionStringBuilder
                {
                    DataSource = serverName,
                    UserID = userName,
                    Password = password,
                    InitialCatalog = databaseName,
                    IntegratedSecurity = integratedSecurity,
                };


            var db = new SrcDbContext(builder.ConnectionString);

            var dbInitializer = new MigrateDbToLatestInitializerConnString<SrcDbContext, SRC.DomainModel.ORMapping.Migrations.Configuration>(builder.ConnectionString);

            //following uses strategy to "CreateIfNotExist<>"
            dbInitializer.InitializeDatabase(db);

            return true;

        }
    }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

EF Code First MigrateDatabaseToLatestVersion 接受配置中的连接字符串名称 的相关文章

随机推荐

  • 绕过截断的“ps”

    我正在尝试编写一个脚本 该脚本将根据关键字查找特定进程 提取 PID 然后使用找到的 PID 杀死它 我在 Solaris 中遇到的问题是 由于 ps 结果被截断 基于关键字的搜索将无法工作 因为关键字是被截断的部分 过去 80 个字符 的
  • 如何检查函数是否已从控制台调用?

    我试图跟踪从控制台调用某些函数的次数 我的计划是在每个函数中添加一个简单的函数 例如 trackFunction 可以检查它们是从控制台调用还是作为底层函数调用 尽管这个问题听起来很简单 但由于我在函数编程方面的知识有限 我找不到解决这个问
  • git filter repo - 未找到 Python - 但已安装

    所以我第一次尝试使用 git filter repo 我已经安装了Python 3 9 我尝试运行 git filter repo strip blobs bigger than 100M 每次失败时 git 重击 git filter r
  • psexec 支持输入重定向吗?

    我试图通过 psexec 控制远程 Python 脚本 它从 stdin 读取命令 但我需要重定向 psexec 的输入 因为 psexec 本身将从另一个程序启动 但是 我没有运气让 psexec 接受重定向的输入 它应该起作用吗 我想做
  • lxml:将命名空间添加到输入文件

    我正在解析由外部生成的 xml 文件program http celldesigner org 然后 我想使用我自己的命名空间向该文件添加自定义注释 我的输入如下所示
  • iOS - Xcode 中的文件所有者和第一响应者是什么?

    iOS Xcode 中的文件所有者和第一响应者是什么 文件所有者是一个实例化的 runtime加载笔尖时拥有笔尖内容及其出口 操作的对象 它可以是您喜欢的任何类的实例 查看工具选项板的标识选项卡 文件所有者是应用程序代码和 nib 文件内容
  • 防止 Python 嵌入在我的默认路径 C:\Python38 中查找模块

    我正在使用 Cython embed模式来生成 exe 我正在评估分发嵌入 Cython 编译的代码并使其在任何机器上运行所需的最少文件集 https stackoverflow com questions 62390978 minimal
  • 如何使用“puts”添加额外的换行符而不将换行符粘贴到字符串中?

    If I say puts Hello 并决定添加一个额外的换行符 我需要这样做 puts Hello n 在字符串中包含这个字符是很难看的 有什么办法可以做到这一点而不污染我的字符串吗 只需再拨打一次电话即可puts puts Hello
  • 测量 Java 程序内存使用情况的最佳方法?

    我目前正在使用VisualVM 但我遇到的问题是我无法保存它生成的图表 我需要报告一些有关其内存使用情况和运行时间的数据 尽管运行时间很容易获得System nanoTime 我也尝试过NetBeans 分析器但这不是我想要的 因为我不是在
  • 执行 JFrame.pack() 后如何保存 JScrollPane 位置?

    我有以下代码 JFrame frame new JFrame JScrollPane scrollPane new JScrollPane new panel with stuff in it frame getContentPane ad
  • 如何打开多个 WebSocket 流

    我正在尝试从 Binance WebSocket API 传输数据 我让它一次只处理一个交易品种 if WebSocket in window open websocket var symbols getSymbol console log
  • 为什么 HTTP 中 GET 方法比 POST 快?

    我是网络编程新手 只是想了解将数据从一个页面发送到另一个页面的 GET 和 POST 方法 据说GET方法比POST更快 但我不知道为什么 我发现的原因之一是 GET 只能包含 255 个字符 难道还有其他原因吗 请有人给我解释一下 与速度
  • 我的计算机上的 Ubuntu 14.04 上的 CUDA 安装在哪里?

    我正在尝试在我的 ubuntu 14 04 中安装 CUDA 7 5 我遵循了本指南中的所有内容 通过包安装 http developer download nvidia com compute cuda 7 5 Prod docs sid
  • 如何在 HTML 电子邮件模板中嵌入图像?

    我创建了一个电子邮件模板 using HTML和从头开始的内联样式 现在我需要添加一些图像 此时无法使用 url 因为它没有托管 我尝试使用 base64 编码 它在 Apple 邮件客户端中有效 但图像未在 Gmail 中呈现 有没有办法
  • FullAjaxExceptionHandler 在无效会话后不会重定向到错误页面

    我在使用 Omnifaces FullAjaxExceptionHandler 时遇到问题 http showcase omnifaces org exceptionhandlers FullAjaxExceptionHandler htt
  • 安装 ibapi 包

    您好 我正在尝试在 python 中安装 ibapi 但是该软件包似乎不可用 因为每次我尝试安装它时都会出现错误 是否有其他方法可以安装该软件包 对你的帮助表示感谢 我已经留下了我使用的代码 尝试安装该软件包 pip install iba
  • Python:在 difflib 中传递 SequenceMatcher“autojunk=False”标志会产生错误

    I am trying https stackoverflow com questions 20267564 python find maximum length of all n word length substrings shared
  • 寻求反转(反转?镜像?翻转)DAG 的算法

    我正在寻找一种算法来 反转 反转 从里到外 有向无环图 A I can t ascii art the arrows so just pretend the slashes are all pointing B C down south e
  • 阻止 header 在调用 reloadData 后被更新?

    我有一个带有自定义标头的 UITableView 可以维护某些状态 当我调用 reloadData 更改 更新 UITableView 中的数据时 标题也会重新加载 有什么方法可以防止这种行为以维护表头中的状态 不要将这些状态放在标题中 您
  • EF Code First MigrateDatabaseToLatestVersion 接受配置中的连接字符串名称

    在尝试在我的项目中实现 EF 迁移时 我陷入了困境 EF Code First MigrateDatabaseToLatestVersion 接受配置中的连接字符串名称 在我的例子中 数据库名称在运行时已知 用户从下拉列表中选择它 正如 D