2013-03-04 2 views
1

AdventureWorks 데이터베이스에서 엔터티 모델을 생성했습니다. 이제 app.config에서 연결 문자열을 삭제하고 런타임에 설정하려고합니다. Model1.Context.cs 내가런타임시 Entity Framework 연결 문자열 설정

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

에 생성자를 chnaged과 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(); 

를 제출 한 파일에 지금은 메타 데이터 키워드를 찾을 수 없습니다 말했다. 런타임시 entityframework에 connectionstring을 설정하는 방법은 무엇입니까?

답변

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) 
    { 

    } 
관련 문제