将连接字符串传递给entity framework6

我在类库中使用EF6(数据库优先)

当我按照向导并添加了我的表时,我选择不在app.config中存储连接字符串,并且我将发送连接字符串。

我以前没有这样做过。 通常我选择将连接字符串放在app.config文件中。

我现在完全难以理解我实际调用函数并将连接字符串传递给它。

以下是我希望从我的解决方案中获得的相关代码片段。

在app.config中 – EF自动添加了这个:

   

我自动生成的上下文类如下所示:

 //------------------------------------------------------------------------------ //  // This code was generated from a template. // // Manual changes to this file may cause unexpected behavior in your application. // Manual changes to this file will be overwritten if the code is regenerated. //  //------------------------------------------------------------------------------ namespace CervionFunctions.DatabaseModel { using System; using System.Data.Entity; using System.Data.Entity.Infrastructure; public partial class cerviondemoEntities : DbContext { public cerviondemoEntities() : base("name=cerviondemoEntities") { } protected override void OnModelCreating(DbModelBuilder modelBuilder) { throw new UnintentionalCodeFirstException(); } public virtual DbSet Customers { get; set; } public virtual DbSet Tickets { get; set; } } } 

最后,我试图调用以下测试函数:

 public static List customersToUpdate() { cerviondemoEntities db; using (db = new DatabaseModel.cerviondemoEntities()) { var result = from customers in db.Customers select customers; return result.ToList(); } } 

我无法解决如何将连接字符串发送到该函数:(

任何帮助将不胜感激!

按照惯例,Entity Framework采用与上下文同名的连接字符串。 例如:

 public cerviondemoEntities() : base("name=cerviondemoEntities") { } 

DbContext类有一个构造函数,它接受一个连接字符串。 您可以添加另一个构造函数,该构造函数将连接字符串作为参数并将其传递给基础构造函数。

 public cerviondemoEntities(string connectionString) : base(connectionString) { } 

请务必创建一个分部类,这样就不会覆盖添加的构造函数。

示例ConnectionString:

    

您需要在上下文中引入另一个构造函数,该构造函数需要一个string connectionString参数并使其调用base(string nameOrConnectionString)

 public cerviondemoEntities(string connectionString) : base(connectionString) { } 

我也有这个问题,并在评论中使用了丹尼尔的方法。

或者,你可以将它添加到.tt文件而不是创建另一个文件并使用’部分’ – Daniel K 2016年12月9日19:16

更新* .Context.tt文件

只需更换线条……

  public <#=code.Escape(container)#>() : base("name=<#=container.Name#>") { 

以下……

 public <#=code.Escape(container)#>() : this("name=<#=container.Name#>") { } public <#=code.Escape(container)#>(String nameOrConnectionString) : base(nameOrConnectionString) { 

我希望这有帮助。

我使用了这样的连接字符串,实体连接字符串而不是普通的连接字符串

  SqlConnectionStringBuilder sqlString = new SqlConnectionStringBuilder() { DataSource = "SOURAV-PC", // Server name InitialCatalog = "efDB", //Database UserID = "sourav", //Username Password = "mypassword", //Password }; //Build an Entity Framework connection string EntityConnectionStringBuilder entityString = new EntityConnectionStringBuilder() { Provider = "System.Data.SqlClient", Metadata = "res://*/testModel.csdl|res://*/testModel.ssdl|res://*/testModel.msl", ProviderConnectionString = sqlString.ToString() }; return entityString.ConnectionString; }