2012-03-03 2 views
3

Я искал вокруг какое-то время, но я просто не могу найти для этого конкретного ответа.Скрытие App.config в ресурсах

В моем текущем проекте C# у меня есть файл App.config, мне нужно, чтобы мой контекст EDM нашел соединение с базой данных.

У меня есть необходимость, чтобы мое приложение состояло из одного .exe-файла, но из-за App.config он будет генерировать .exe.config рядом с моим .exe-файлом и требует его для правильной работы.

Есть ли способ добавить строку подключения для моего контекста БД программно или можно сохранить App.config в ресурсах?

Как передать строку подключения в контекст базы данных?

+0

Какой «контекст EDM» вы используете для доступ к БД? Если вы сообщите нам, мы можем сообщить вам, как настроить его без App.config ... – ChrFin

+0

Он автоматически генерируется Model.edmx, который я использую, я добавил ADO.NET Entity Data Model. Это «открытый частичный класс MyEntities: ObjectContext», имеющий несколько полей «ObjectSet » – DarkDevine

+1

Это бессмысленно. Вы сохраняете параметр в app.exe.config, чтобы его легко редактировать и позволять вашей программе работать на другом компьютере с другим сервером базы данных. Хранение его в ресурсе не позволяет его редактировать. Вы можете точно так же закодировать его в своем исходном коде. –

ответ

-2

Вы можете сохранять и читать настройки, как и все передовые программы в реестре и забыть app.config, и это, как это сделать:

public object GetRegistryValue(string KeyName, object DefaultValue) 
     { 
      object res = null; 
      try 
      { 
       Microsoft.VisualBasic.Devices.Computer c = new Microsoft.VisualBasic.Devices.Computer(); 
       Microsoft.Win32.RegistryKey k = c.Registry.CurrentUser.OpenSubKey("Software\\YourAppName", true); 
       if (k != null) 
       { 
        res = k.GetValue(KeyName, DefaultValue); 
       } 
       else 
       { 
        k = c.Registry.CurrentUser.CreateSubKey("Software\\YourAppName"); 
       } 
       if (k != null) 
        k.Close(); 
       // ex As Exception 
      } 
      catch 
      { 
       //PromptMsg(ex) 
      } 
      return res; 
     } 

public void SetRegistryValue(string KeyName, object _Value) 
     { 
      try 
      { 
       Microsoft.VisualBasic.Devices.Computer c = new Microsoft.VisualBasic.Devices.Computer(); 

       Microsoft.Win32.RegistryKey k = c.Registry.CurrentUser.OpenSubKey("Software\\YourAppName", true); 
       if (k != null) 
       { 
        k.SetValue(KeyName, _Value); 
       } 
       else 
       { 
        k = c.Registry.CurrentUser.CreateSubKey("Software\\YourAppName"); 
        k.SetValue(KeyName, _Value); 
       } 
       if (k != null) 
        k.Close(); 
       // ex As Exception 
      } 
      catch 
      { 
       //PromptMsg(ex) 
      } 
     } 
+0

Извините, я обновил свой вопрос, это не о том, что я не знаю, как и где хранить мой конфиг, больше о том, что я не хочу App.config, но не знаю, как передать мою строку соединения, иначе – DarkDevine

+0

Это мой ответ, вы можете сохранить соединение в реестре с помощью SetRegistryValue, а затем прочитать его с помощью GetRegistryValue для загрузки con в свой контекст данных. –

+0

Но как передать строку подключения в контекст базы данных? Я прочитал строку подключения откуда-то, но что после этого? Как мне сообщить мой контекст «здесь, подключитесь к серверу в этой строке» – DarkDevine

0

В конце концов последний комментарий Amen Ayach указал меня к правильному решению

вместо Instancing моего ObjectContext без параметров, я просто должен был передать строку соединения из моего App.config, и я был в состоянии удалить App.config

вместо

Entities = new MyEntities(); 

я назвал

Entities = new MyEntities("metadata=res://*/Models.csdl|res://*/Models.ssdl|res://*/Models.msl;provider=System.Data.SqlClient;provider connection string=\"data source=sql-server;initial catalog=initialDatabase;integrated security=True;pooling=False;multipleactiveresultsets=True;App=EntityFramework\""); 

Visual Studio автоматически перегружает конструктор вашего контекста класса он создает что позволяет передавать строку подключения вручную

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