2013-03-04 2 views
1

Я создал модель сущности из базы данных AdventureWorks; теперь я хочу удалить строку подключения в app.config и установить ее во время выполнения. В то Model1.Context.cs файл я chnaged конструктор дляУстановить строку подключения Entity Framework во время выполнения

public AdventureWorksEntities(string str) 
     : base("name=AdventureWorksEntities") 
    { 
     this.Database.Connection.ConnectionString = str; 
    } 

и в Program.cs файл

EntityConnectionStringBuilder ecsb = new EntityConnectionStringBuilder(); 
     ecsb.Metadata = @"res://*/Model1.csdl|res://*/Model1.ssdl|res://*/Model1.msl"; 
     ecsb.Provider = @"System.Data.SqlClient"; 
     ecsb.ProviderConnectionString = 
      @"data source=.\sqlexpress;initial catalog=AdventureWorks;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework"; 

     using (var ent = new AdventureWorksEntities(ecsb.ConnectionString)) 
     { 
      Console.WriteLine(ent.Database.Connection.ConnectionString); 
      var add = ent.Addresses; 
      foreach (var ad in add) 
      { 
       Console.WriteLine(ad.City); 
      } 


     } 
     Console.ReadKey(); 

Теперь он говорит ключевое слово метаданные не найдены. Как установить строку соединения для сущности в процессе выполнения?

ответ

7

Этот пример использует стандартную регистрационную информацию .aspx для установки информации UserID и Password в строке соединения. В файле web.config или app.config не сохраняются настройки строки подключения.

Изменить страницу Model.Designer.cs следующим образом:

public partial class Entities : ObjectContext 
{ 
    #region Constructors 


    public static string getConStrSQL(string UID,string PWD) 
    { 

     string connectionString = new System.Data.EntityClient.EntityConnectionStringBuilder 
     { 
      Metadata = "res://*", 
      Provider = "System.Data.SqlClient", 
      ProviderConnectionString = new System.Data.SqlClient.SqlConnectionStringBuilder 
      { 
       InitialCatalog = "your_database_name", 
       DataSource = "your_server", 
       IntegratedSecurity = false, 
       UserID = UID,     
       Password = PWD,    
      }.ConnectionString 
     }.ConnectionString; 

     return connectionString; 
    } 

    /// <summary> 
    /// Initialize a new Entities object. 
    /// </summary> 
    public Entities(string UID,string PWD) 
     : base(getConStrSQL(UID,PWD), "Entities") 
    { 
     this.ContextOptions.LazyLoadingEnabled = true; 
     OnContextCreated(); 
    } 
    ...... 

Затем в коде позади страницы:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 
using System.Web.Mvc; 
using System.Web.Security; 


public partial class views_html_form : System.Web.UI.Page 
{ 
public void Page_Load() 
{ 
    if (currentUser() == null) 
    { 
     HttpContext.Current.Response.Redirect("~/login.aspx"); 
    } 
} 
public static MembershipUser currentUser() 
{ 
    MembershipUser currentUser = Membership.GetUser(); 
    return currentUser; 
} 

public static string UID() 
{ 
    string UID = currentUser().UserName; 
    return UID; 
} 
public static string PWD() 
{ 
    string PWD = currentUser().GetPassword(); 
    return PWD; 
} 
public static void SelectRecord() 
{ 
    YourModel.Entities db = new YourModel.Entities(UID(), PWD()); 
    var query = from rows in db.Table_Name orderby rows.ID select rows; 
    ..... 

Вот и все. Не вмешиваться в файлы .config. В качестве альтернативы вы можете отправить имя базы данных, например, в качестве параметра таким же образом.

2

я бы что-то вроде:

public AdventureWorksEntities(string server, string databaseName, string user, string password) 
     :base(new System.Data.EntityClient.EntityConnectionStringBuilder 
     { 
      Metadata = "res://*", 
      Provider = "System.Data.SqlClient", 
      ProviderConnectionString = new System.Data.SqlClient.SqlConnectionStringBuilder 
      { 
       InitialCatalog = databaseName, 
       DataSource = server, 
       IntegratedSecurity = false, 
       UserID = user, 
       Password = password, 

      }.ConnectionString 
     }.ConnectionString) 
    { 

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