2013-05-14 94 views
2

我有一個連接到MYSQL數據庫的應用程序。我使用Entity Framework來完成所有工作。 現在,當我第一次安裝的I設立實體,並導致這樣的連接字符串中:在運行時選擇實體連接字符串

<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中=>從更新數據庫和服務器

登錄形式=>用戶信息authentificate

的MainForm =>,所有的行動參與。如果管理員登錄,他可以修改數據庫中的內容

數據庫: 有2個用戶:root和lucian。

「盧西恩」是一種有限的用戶...

現在,我的問題是:

我如何可以添加第二個連接字符串到已經存在的,並選擇一個在運行時?我的意思是,當Form1運行時,讓線程進入睡眠狀態,選擇第二個連接字符串,然後進入登錄窗體,以管理員身份登錄並使數據庫成爲犯罪?

我怎樣才能從連接字符串,從外部文件獲取tho登錄信息?

+1

使用[this constructor](http://msdn.microsoft.com/en-us/library/bb739017.aspx)按名稱選擇。或者,如果您使用EF5,[此構造函數](http://msdn.microsoft.com/en-us/library/gg679467(v = vs.103).aspx) – Aron

回答

0

就我所見,您已經使用了EF DB first或model first,因此連接字符串被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

0

所以這是我如何解決了:
修改了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; 

* *每當我想使用的情況下,我使用(例如):

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; 
     } 

現在,我仍然有以發現我如何加密配置文件.... 謝謝大家的幫助...

相關問題