Tre*_*iel 21 c# entity-framework
我在类库中使用EF6(数据库优先)
当我按照向导并添加了我的表时,我选择不在app.config中存储连接字符串,并且我将发送连接字符串.
我以前没有这样做过.通常我选择将连接字符串放在app.config文件中.
我现在完全难以理解我实际调用函数并将连接字符串传递给它.
以下是我希望从我的解决方案中获得的相关代码片段.
在app.config中 - EF自动添加了这个:
<connectionStrings>
<add name="cerviondemoEntities" connectionString="metadata=res://*/DatabaseModel.cervionEDM.csdl|res://*/DatabaseModel.cervionEDM.ssdl|res://*/DatabaseModel.cervionEDM.msl;provider=System.Data.SqlClient;provider connection string="data source=DEVBOX;initial catalog=cerviondemo;user id=sa;MultipleActiveResultSets=True;App=EntityFramework"" providerName="System.Data.EntityClient" />
</connectionStrings>
Run Code Online (Sandbox Code Playgroud)
我自动生成的上下文类如下所示:
//------------------------------------------------------------------------------
// <auto-generated>
// 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.
// </auto-generated>
//------------------------------------------------------------------------------
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<Customer> Customers { get; set; }
public virtual DbSet<Ticket> Tickets { get; set; }
}
}
Run Code Online (Sandbox Code Playgroud)
最后,我试着调用以下测试函数:
public static List<Customer> customersToUpdate()
{
cerviondemoEntities db;
using (db = new DatabaseModel.cerviondemoEntities())
{
var result = from customers in db.Customers
select customers;
return result.ToList();
}
}
Run Code Online (Sandbox Code Playgroud)
我无法弄清楚如何将连接字符串发送到该函数:(
任何帮助将不胜感激!
And*_*mos 40
按照惯例,Entity Framework采用与上下文同名的连接字符串.例如:
public cerviondemoEntities()
: base("name=cerviondemoEntities")
{
}
Run Code Online (Sandbox Code Playgroud)
DbContext类有一个构造函数,它接受一个连接字符串.您可以添加另一个构造函数,该构造函数将connectionstring作为参数并将其传递给基础构造函数.
public cerviondemoEntities(string connectionString) : base(connectionString)
{
}
Run Code Online (Sandbox Code Playgroud)
请务必创建一个分部类,以便不会覆盖添加的构造函数.
示例ConnectionString:
<connectionStrings>
<add name="cerviondemoEntities" connectionString="data source=server\database;initial catalog=catalog;persist security info=True;user id=user;password=password;MultipleActiveResultSets=True;App=EntityFramework" providerName="System.Data.SqlClient" />
</connectionStrings>
Run Code Online (Sandbox Code Playgroud)
我也遇到了这个问题,并在评论中使用了Daniel的方法。
另外,您也可以将其添加到.tt文件中,而不是创建另一个文件并使用“部分”文件-Daniel K 16年9月9日,19:16
更新* .Context.tt文件
只需更换线...
public <#=code.Escape(container)#>()
: base("name=<#=container.Name#>")
{
Run Code Online (Sandbox Code Playgroud)
与以下...
public <#=code.Escape(container)#>()
: this("name=<#=container.Name#>")
{
}
public <#=code.Escape(container)#>(String nameOrConnectionString)
: base(nameOrConnectionString)
{
Run Code Online (Sandbox Code Playgroud)
我希望这有帮助。
您需要在您的上下文中引入另一个需要string connectionString参数的构造函数并使其调用base(string nameOrConnectionString):
public cerviondemoEntities(string connectionString) : base(connectionString)
{
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
41850 次 |
| 最近记录: |