2013-03-04 88 views
1

我已经从AdventureWorks数据库中生成实体模型;现在我想删除app.config中的连接字符串,并在运行时设置它。在Model1.Context.cs文件我已经chnaged构造函数在运行时设置实体框架连接字符串

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

    } 
相关问题