【发布时间】:2016-10-26 07:35:15
【问题描述】:
我开始想使用 T4 生成代码。为此,我需要来自数据库的数据。由于项目中的所有数据都已使用 EF 检索,因此我选择使用 EF。 因此,在我的项目中,我创建了一个实用程序类,其中包含一个返回我需要的对象的静态方法。我发现,在 T4 自定义工具的上下文中运行我无法从配置中读取。所以我手动设置了我的上下文的连接字符串,它起作用了!
private static string GetConnectionString()
{
//How to read from the web.config when running a T4 template ?
//ConnectionStringSettings settings = ConfigurationManager.ConnectionStrings["XXXXXXX"];
//var connectionString = settings.ConnectionString;
var connectionString = @"Data Source=XXXXXX;Initial Catalog=XXXXXX;Integrated Security=SSPI;MultipleActiveResultSets=true;";
return connectionString;
}
后来我在我的解决方案中添加了一个项目。项目 A 包含具有返回对象的静态方法的类。现在从项目 B 的代码中,我希望调用该静态方法。
运行该代码时,我收到一个错误:“没有为 ADO.NET 提供程序找到具有不变名称“System.Data.SqlClient”的实体框架提供程序。确保提供程序已在“entityFramework”部分中注册应用程序配置文件的名称。有关详细信息,请参阅http://go.microsoft.com/fwlink/?LinkId=260882。"
当我为项目 B 安装 nuget 包 EF 时,代码按预期运行。 但这超出了在项目 A 中创建实用程序类的全部目的。 调用方应该只接收对象而不管它自己的上下文。
我该如何解决这个问题? 在不知道 EF 的情况下,如何配置静态方法以使用 EF 并使其可用作调用方的参考?
我认为答案可能类似于重写 EF 行为以从实用程序类中提供的静态上下文中读取,而不是从当前运行时提供的配置中读取。但是你怎么能这样做呢?
【问题讨论】:
-
调用项目(即实际创建 DbContext 的项目)需要引用,因为在此上下文中读取应用程序配置。不知道EF在这方面是否支持拆分配置功能。
标签: c# entity-framework configuration t4