我想使用EntityFramework生成一些帶有T4模板的代碼。我在同一個大會創造了一個T4模板,我目前工作EF6的DbContext:如何在T4模板中使用DbContext?
<#@ template language="C#" hostspecific="true" debug="True" #>
<#@ assembly name="$(SolutionDir)\packages\EntityFramework.6.1.3\lib\net45\EntityFramework.dll" #>
<#@ assembly name="$(TargetPath)" #>
<#@ import namespace="Conwell.Administration.Data.Entities" #>
<#
using (var db = new KassenautomatEntities())
{
#>
//Hello World
<#
}
#>
當我運行它,我得到以下execption:
運行改造信息:System.InvalidOperationException:
實體框架提供程序類型的「實例」成員 'System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer,Version = 6.0.0.0,Culture = neutral, PublicKeyToken = b77a5c56193 '4e089'沒有返回從'System.Data.Entity.Core.Common.DbProviderServices'繼承的對象 。 實體框架提供者必須繼承此類,並且 「實例」成員必須返回提供者的單例實例。 這可能是因爲提供程序不支持實體框架6 或更高版本;有關更多 的信息,請參閱http://go.microsoft.com/fwlink/?LinkId=260882。
相同的上下文在T4以外工作正常。我錯過了什麼?
我想您必須在單獨的程序集中創建一個'KassenautomatEntities'定義。然後參考這個程序集可以在T4中使用。 –
從VS2015升級到VS2017後,我剛剛開始出現此錯誤。如果我在VS2015中運行相同的腳本,它的工作原理就是這樣,所以我一直在這樣做,但基督徒你是否曾經發現過這個問題的解決方法?並且@AlexanderPetrov我的DbContext類在一個獨立的程序集中,在這裏我已經證明模板是完整的,因爲我在VS2015中使用它,所以VS2017中生成的代碼在上下文中發生了什麼變化 –
我不敢說,我用了ado.net @ChrisSchaller –