在运行时更改连接/数据库(实体框架)

时间:2018-08-14 08:57:48

标签: c# entity-framework sql-server-2014 sql-server-2014-localdb

我创建了一个应用程序,该程序从机床读取一些变量并将其上载到本地SQL Server。有两种可能在哪里运行应用程序

  • 直接在机床上(有带SQL Server的iPC)
  • 在我自己的PC上

在我的app.config中,我有2个连接字符串:

     <connectionStrings>
<!--<add name="Entities" connectionString="metadata=res://*/TosEntityModel.csdl|res://*/TosEntityModel.ssdl|res://*/TosEntityModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=WIN-652OQC8T8TT;initial catalog=TOSVariableDatabase.MDF;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />-->
<add name="Entities" connectionString="metadata=res://*/TosEntityModel.csdl|res://*/TosEntityModel.ssdl|res://*/TosEntityModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=WINDOWS-47TIMHV\SQLEXPRESS;initial catalog=TOSVariableDatabase;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient"/>
</connectionStrings>

因此,如果要在机床上运行我的应用程序,请注释第一个连接字符串,然后使用第二个连接字符串构建应用程序-之后,将其上传到机床上,然后运行即可。 如果要在PC上运行它,请注释第二个连接字符串,取消注释第一个连接字符串,然后重新生成,然后在PC上运行即可。

但是我想启动我的应用程序,然后才选择/更改连接-无需重建等。

所以我尝试了几件事:

首先,我尝试构建here之类的连接字符串,然后使用此新的连接字符串创建上下文的新实例。我将此添加到context的构造函数中:

        public Entities(string sConnectionString)
        : base(sConnectionString)
    {            
    }

然后我使用以下字符串创建上下文的新实例:

 dataManager.context = new Entities(entityBuilder.ConnectionString);

它给我抛出错误:

  

底层提供程序在打开时失败

  

命名管道提供程序错误40

我试图修复它(重新启动服务MSSQLSERVER等),但没有帮助。

其次,我尝试使用此topic(静态方法ChangeDatabase)中的解决方案,但对我而言不起作用(当我使用不同的初始目录和数据源运行此方法时,没有任何改变)。

那么,您能帮我吗?也许我的情况有一些更简单的解决方案?

别对我投掷石头-我在编程方面还是一个新手,尤其是在Entity Framework中。

1 个答案:

答案 0 :(得分:0)

您以错误的方式设置了连接字符串。除非您提供更多代码,否则我不会告诉您错误。

您可以简单地编写如下内容:

[HttpPost]
public ActionResult Create(List<ViewModelName> model)
{
    try
    {
        // example to select all amount values
        var x = model.Select(x => x.Amount).ToList();

        // do something

        return RedirectToAction("Index");
    }
    catch 
    {
        // error handling

        return View(model);
    }
}

如果它与app.config一起运行,则错误在您的代码内。