在运行时选择实体连接字符串

时间:2013-05-14 19:16:22

标签: c# entity-framework

我有一个连接到MYSQL数据库的应用程序。我使用Entity Framework来完成所有工作。 现在当我第一次安装时,我设置了实体,并产生了这样的连接字符串:

<connectionStrings>
<add name="networkingEntities" connectionString="metadata=res://*/Model1.csdl|res://*/Model1.ssdl|res://*/Model1.msl;provider=MySql.Data.MySqlClient;provider connection string="server=localhost;user id=root;password=lucian;persist security info=True;database=networking"" providerName="System.Data.EntityClient"/>
</connectionStrings>  

现在,我的应用程序有2个用户:管理员和学生。

Form1 =&gt;从数据库和服务器更新信息

登录表单=&gt;用户认证

MainForm =&gt;所有行动都参与其中。如果管理员已登录,则可以修改数据库中的内容

数据库: 有2个用户:root和lucian。

“lucian”是一个有限的用户...

现在,我的问题是:

如何将第二个连接字符串添加到现有连接字符串中,并在运行时选择该连接字符串?我的意思是,当Form1运行时,让线程进入休眠状态,选择第二个连接字符串,然后转到登录表单,以admin身份登录并使cnahge成为数据库的罪名?

如何从外部文件中获取连接字符串中的登录信息?

2 个答案:

答案 0 :(得分:0)

据我所知,您首先使用EF DB或首先使用模型,因此Entity Framework将连接字符串添加到app.config。如果第二个连接字符串应指向同一个数据库,请将新的DataModel添加到项目中并将其指向您选择的数据库并从中生成模型,然后EF为您创建连接字符串。

定位第二个连接字符串。

// by name attribute from the app.config/web.config
ConfigurationManager.ConnectionStrings["networkingEntities"].ConnectionString; connection string.
// or select by index.
var index = 0;
var adminConnectionString = ConfigurationManager.ConntectionString[++index];
var userConnectionString = ConfigurationManager.ConnectionString[index];

编辑你的答案。 嗨,因为我对这个话题很感兴趣,我做了一个快速谷歌,发现了这个: http://msdn.microsoft.com/en-us/library/system.configuration.sectioninformation.protectsection.aspx 似乎.NET为我们提供了一些方便的内置机制。我也不熟悉这个主题我不知道如何使用它。 GLHF

答案 1 :(得分:0)

所以这就是我解决的问题:
1。修改了App.config,如:

 <connectionstrings configsource="DatabaseConnectionDetails.config" />;

这是DatabaseConnectionDetails.config:

<connectionstrings>
    <add name="networkingEntities" connectionstring="metadata=res://*/Model1.csdl|res://*/Model1.ssdl|res://*/Model1.msl;provider=MySql.Data.MySqlClient;provider connection string=&quot;server=localhost;user id=lucian;password=lucian;persist security info=True;database=networking&quot;" providername="System.Data.EntityClient" />
    <add name="networkingEntitiesAdmin" connectionstring="metadata=res://*/Model1.csdl|res://*/Model1.ssdl|res://*/Model1.msl;provider=MySql.Data.MySqlClient;provider connection string=&quot;server=localhost;user id=root;password=lucian;persist security info=True;database=networking&quot;" providername="System.Data.EntityClient" />
  </connectionstrings>

* 2. *为Model1.Context.tt模板添加了一个带字符串参数的构造函数:

 public <#=code.Escape(container)#>(string myString)
        : base(myString)
    {
<#
if (!loader.IsLazyLoadingEnabled(container))
{
#>
        this.Configuration.LazyLoadingEnabled = false;
<#
}
#>
    }  

* 3。 *获取如下连接字符串:

string  str = ConfigurationManager.ConnectionStrings["networkingEntitiesAdmin"].ConnectionString;

* 4。 *每当我想使用上下文时,我都会使用(例如):

networkingEntities net=new networkingEntities(str);


public List<utilizator> ListaUtilizatori()
        {

            var query = from u in net.utilizator
                        select u;
            List<utilizator> users = new List<utilizator>();
            try
            {
                users = query.ToList();
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
            }
            return users;
        }

现在,我仍然需要了解如何加密配置文件.... 谢谢大家的帮助......