2013-05-14 2 views
2

У меня есть приложение, которое подключается к базе данных 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 => обновляет информацию из базы данных и от сервера

Входа формы => пользователей

авторизуйтесь

MainForm => где все действие принимает участие. Если администратор зарегистрирован, он может изменять содержимое в базе данных

База данных: имеет 2 пользователя: root и lucian.

«Лукиан» является ограниченным пользователем ...

Теперь моя проблема:

Как я могу добавить вторую строку подключения к уже существующей, и выбрать, что один во время выполнения? Я имею в виду, что когда Form1 работает, поставьте поток в режим сна, выберите вторую строку подключений, а затем перейдите в форму входа, войдите в систему как администратор и сделайте cnahge sin базой данных?

И как я могу получить данные входа в систему из строки подключения из внешнего файла?

+1

Используйте [этот конструктор] (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, в результате чего строка подключения была добавлена ​​в app.config с помощью Entity Framework. Если вторая строка подключения должна указывать на одну и ту же базу данных, добавьте новый новый 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]; 

Редактировать ваш ответ. Привет, потому что меня тоже интересует эта тема. Я сделал быстрый google и нашел это: http://msdn.microsoft.com/en-us/library/system.configuration.sectioninformation.protectsection.aspx Кажется, у .NET есть несколько удобных встроенных механизмов для нас. То, что я тоже новичок в этой теме, я не могу ответить, как она используется. GLHF

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

Теперь, я до сих пор чтобы узнать, как я шифрую файлы конфигурации .... Спасибо всем за помощь ...

Смежные вопросы