C# 更改连接字符串并在部署时将其保存为实体框架
我有一个桌面应用程序,我即将完成概念验证,但我有一个最后的功能,我想添加,但我认为这是不可能的 最终部署的应用程序使用实体框架,并在VS2010中编写。该应用程序需要部署在两个不同的公司,这两个公司具有相同的SQL数据库结构(但名称不同C# 更改连接字符串并在部署时将其保存为实体框架,c#,wpf,entity-framework,app-config,C#,Wpf,Entity Framework,App Config,我有一个桌面应用程序,我即将完成概念验证,但我有一个最后的功能,我想添加,但我认为这是不可能的 最终部署的应用程序使用实体框架,并在VS2010中编写。该应用程序需要部署在两个不同的公司,这两个公司具有相同的SQL数据库结构(但名称不同Database1或Database2),但托管在不同的服务器上(例如Server1和Server2) 能够在wpf表单中设置Server1或Server2和Database1或Database2,并“保存”应用程序设置,而不必使用不同的EF模型部署两次,这将是一
Database1
或Database2
),但托管在不同的服务器上(例如Server1
和Server2
)
能够在wpf表单中设置Server1
或Server2
和Database1
或Database2
,并“保存”应用程序设置,而不必使用不同的EF模型部署两次,这将是一件好事
这意味着在运行时写入app.config
文件,阅读这一点似乎很困难,但这指的是常规设置,而不是配置字符串,或者我是否遗漏了要点
在我的情况下,我的app.config
应该是
<connectionStrings>
<add name="OsmiContext"
connectionString="metadata=res://*/OsmiModel.csdl|res://*/OsmiModel.ssdl|res://*/OsmiModel.msl;provider=System.Data.SqlClient;provider connection string="Data Source=**Server1**\**DATABASE1**;Persist Security Info=True;User ID=<STANDARDUSER>;Password=<STANDARDPASSWORD>Qu3r3y3;MultipleActiveResultSets=True;Application Name=EntityFramework""
providerName="System.Data.EntityClient" />
</connectionStrings>
相同公司的应用程序是否共享相同的功能?如果是,则添加2个不同的连接字符串。。一个可以区分这两个公司的变量有几种方法可以做到这一点,而不会造成太大的困难。为什么不使用两个
app.config
-app.company1.config
和app.company2.config
,然后在安装时选择正确的一个,并将其复制到客户的server2不同的app.configs最好,覆盖数据似乎不正确。仅将一家公司的密码公开给另一家公司应该是不这样做的充分理由…@MethodMan是的,它们共享相同的功能,因为它们是同一组公司,并且应用程序链接到组ERP SQL数据库。您的方法的问题是如何告诉实体模型要使用两个连接字符串中的哪一个,或者如何基于我的variable@AlexanderDerck是的,我可以有两个app.config,但我想让用户能够选择,因为他们都为同一组公司工作,而且有时一个用户在由于生病等原因,A公司将在B公司做同样的工作
<build so new App.Config Method>
String NewConnection =@"metadata=res://*/OsmiModel.csdl|res://*/OsmiModel.ssdl|res://*/OsmiModel.msl;provider=System.Data.SqlClient;provider connection string="Data Source=**Server2**\**DATABASE2**;Persist Security Info=True;User ID=<STANDARDUSER>;Password=<STANDARDPASSWORD>Qu3r3y3;MultipleActiveResultSets=True;Application Name=EntityFramework"" providerName="System.Data.EntityClient"
string appPath =System.IO.Path.GetDirectoryName(Reflection.Assembly.GetExecutingAssembly().Location);
Configuration config = ConfigurationManager.OpenExeConfiguration(Application.ExecutablePath);
config.AppSettings.Settings["OsmiContext"].Value = NewConnection ;
config.Save(ConfigurationSaveMode.Modified);