如何在运行时

时间:2015-08-27 00:06:50

标签: c# entity-framework ef-code-first

我错过了什么。我有一个小项目,我试图将一些数据插入数据库。当我创建模型时,我对现有数据库使用了Code First。我想让应用程序能够在运行时指向任何服务器。这是一个向下和脏的实用程序应用程序并在内部运行但我在运行它时需要一些灵活性。 从阅读一些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中找不到的内容)。因为我试图在运行时注入连接字符串,所以我在app config中没有连接字符串或键。

错误:

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

我的印象是我读过Code首先使用标准SQL连接字符串而不需要EntityConnectionStringBuild(用于第一个开发对象)

有人可以指出我正确的方向,我错过了什么或我做错了什么。

提前致谢

1 个答案:

答案 0 :(得分:1)

你几乎就在那里,只需将连接字符串传递给基地:

public OtherEventModel(string ConnectionString)
       : base(ConnectionString)

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