【发布时间】:2014-08-23 09:12:22
【问题描述】:
我编写了一个 T4 模板,我在其中实例化了一个 EF 上下文以读取一些数据。 问题是上下文无法从 Web.config 中看到连接字符串。
如何使 Web.config 中的连接字符串可用于模板?
更多信息:
- 模板是从头开始编写的
- EF edmx 位于另一个项目中
- 我在模板中进行的第一个查询告诉我在模板所在的项目中找不到所需的连接字符串
尝试了下面的一些解决方案(谢谢),但我明白了:
Error 2 Compiling transformation: 'Microsoft.VisualStudio.TextTemplating12165CB53B43A726CBA54A29800255D257AAFD4D5F0DACE4DFE5872F2DEC7739EDF358F49C0444A912B851939903A79BC6180FCEB3FD0D1BF8C0093741DDDACA.GeneratedTextTransformation' does not contain a definition for 'Host' and no extension method 'Host' accepting a first argument of type 'Microsoft.VisualStudio.TextTemplating12165CB53B43A726CBA54A29800255D257AAFD4D5F0DACE4DFE5872F2DEC7739EDF358F49C0444A912B851939903A79BC6180FCEB3FD0D1BF8C0093741DDDACA.GeneratedTextTransformation' could be found (are you missing a using directive or an assembly reference?)
我声明了以下内容:
<#@ assembly name="EnvDTE" #>
<#@ import namespace="EnvDTE" #>
<#@ import namespace="Microsoft.VisualStudio.TextTemplating" #>
如果我包含 Microsoft.VisualStudio.TextTemplating 的程序集,它会告诉我它已经插入。
另外,有没有办法让 DbContext 可以使用 ConfigurationManager,这样他就可以在后台读取他想要的内容,而无需我将连接字符串传递给他?
已解决,再次感谢:
<#@ template hostspecific="true" language="C#" debug="false" #>
<#@ assembly name="System.Core.dll" #>
<#@ assembly name="System.Configuration" #>
<#@ import namespace="Microsoft.VisualStudio.TextTemplating" #>
<#@ import namespace="System.Configuration" #>
var map = new ExeConfigurationFileMap();
map.ExeConfigFilename = this.Host.ResolvePath(@"..\Web.config");
var config = ConfigurationManager.OpenMappedExeConfiguration(map, ConfigurationUserLevel.None);
var connectionString = config.ConnectionStrings.ConnectionStrings["MyConnectionName"].ConnectionString;
【问题讨论】:
标签: c# entity-framework t4