如何在运行时设置 EF 代码优先连接字符串

How to set a EF code first connection string at runtime

我遗漏了一些东西。我有一个小项目,我试图将一些数据插入数据库。当我创建模型时,我对现有数据库使用了 Code First。我想让应用程序能够在 运行 时间指向任何服务器。这是一个在内部 运行ning 的低级实用程序应用程序,但在 运行ning 它时我需要一些灵活性。 通过阅读一些 msdn 文章,我看到了我可以在初始化时扩展 DBContext 的地方,所以我做了以下事情:

在初始化中添加了一个参数:

 public OtherEventModel(string ConnectionString)
            : base("name=OtherEventModel")
        {...

然后在我的代码中,我根据从 UI:

传入的属性构建了连接字符串
private OtherEventModel ConnectToServer(string server, string username, string password)
        {
            try
            {

                SqlConnectionStringBuilder sqlBuilder = new SqlConnectionStringBuilder
                {
                    DataSource =  server,
                    UserID = username,
                    Password = password,
                    InitialCatalog = "My_Database",
                    IntegratedSecurity = true
                };

                var connection = sqlBuilder.ToString();
                ModelContext = new OtherEventModel(connection);

                return ModelContext;
            }
            catch (Exception ex)
            {
                throw new Exception(string.Format("Error connecting to server {0}", ex.Message));
            }

我可以看到创建的连接字符串,但是当我 运行 代码时,我收到连接字符串的异常(找不到应该在 app.config 中的内容)。我在应用程序配置中没有连接字符串或密钥,因为我试图在 运行 时间注入连接字符串。

错误:

Error inserting data No connection string named 'OtherEventModel' could be found in the application config file

从我读到的内容来看,我的印象是代码首先使用标准 SQL 连接字符串并且不需要 EntityConnectionStringBuild(用于对象优先开发)

有人可以指出我错过了什么或做错了什么吗?

提前致谢

大功告成,只需将连接字符串传递给基础即可:

public OtherEventModel(string ConnectionString)
       : base(ConnectionString)

确保在下面的方法中注释掉抛出行。不幸的是,每次更新模型时都必须再次执行此操作。