如何永久修复升级到 EF6 后出现的 "EdmFunctionAttribute is obsolete" 警告?
How can I permanently fix the "EdmFunctionAttribute is obsolete" warning, which occurs after upgrading to EF6?
我在 upgraded a database first project from EF4 to EF 6.1.3:
之后收到警告 "EdmFunctionAttribute is obsolete"
'System.Data.Entity.Core.Objects.DataClasses.EdmFunctionAttribute' is
obsolete: 'This attribute has been replaced by
System.Data.Entity.DbFunctionAttribute.' C:\{myProjectPath}\DataContextEntityObjects.cs
该属性用在很多地方,例如
[EdmFunction("DataContext", "Split")]
public IQueryable<Split_Result> Split(global::System.String rowData, global::System.String splitOn)
{
// ... auto-generated code ...
}
如果您在错误消息提到的 *.cs 文件中修复该问题,那么每次通过 从数据库更新模型 更新模型时,
错误再次出现。
如何永久解决这个问题(这样模型更新就不会再次出现)?
文件 DataContextEntityObjects.cs
是从 DataContextEntityObjects.tt
自动生成的,并在
等多个地方使用该属性
[EdmFunction("DataContext", "Split")]
public IQueryable<Split_Result> Split(global::System.String rowData, global::System.String splitOn)
{
// ... auto-generated code ...
}
因为每次通过从数据库更新模型更新模型时,它都会自动重新生成,
解决方案是修改T4模板如下:
我已确定 T4 文件中的相关部分从这里开始(第 214-283 行):
////////
//////// Write EntityContainer and ObjectContext Function Import methods.
////////
region.Begin(CodeGenerationTools.GetResourceString("Template_RegionFunctionImports"));
foreach (EdmFunction edmFunction in container.FunctionImports)
{
IEnumerable<FunctionImportParameter> parameters = FunctionImportParameter.Create(edmFunction.Parameters, code, ef);
按照模板中的建议 How to: Customize Object Layer Code Generation 和
Generating Artifacts by Using Text Templates,修改模板即可生成正确的代码。
执行以下操作:
打开 DataContextEntityObjects.tt
文件
搜索并替换以下内容:
保存文件DataContextEntityObjects.tt
从现在开始,每次更新模型时,都会生成相应的 *.cs 文件,并在其中正确创建属性,因此过时警告消失。
我在 upgraded a database first project from EF4 to EF 6.1.3:
之后收到警告 "EdmFunctionAttribute is obsolete"'System.Data.Entity.Core.Objects.DataClasses.EdmFunctionAttribute' is obsolete: 'This attribute has been replaced by System.Data.Entity.DbFunctionAttribute.' C:\{myProjectPath}\DataContextEntityObjects.cs
该属性用在很多地方,例如
[EdmFunction("DataContext", "Split")]
public IQueryable<Split_Result> Split(global::System.String rowData, global::System.String splitOn)
{
// ... auto-generated code ...
}
如果您在错误消息提到的 *.cs 文件中修复该问题,那么每次通过 从数据库更新模型 更新模型时, 错误再次出现。
如何永久解决这个问题(这样模型更新就不会再次出现)?
文件 DataContextEntityObjects.cs
是从 DataContextEntityObjects.tt
自动生成的,并在
[EdmFunction("DataContext", "Split")]
public IQueryable<Split_Result> Split(global::System.String rowData, global::System.String splitOn)
{
// ... auto-generated code ...
}
因为每次通过从数据库更新模型更新模型时,它都会自动重新生成, 解决方案是修改T4模板如下:
我已确定 T4 文件中的相关部分从这里开始(第 214-283 行):
////////
//////// Write EntityContainer and ObjectContext Function Import methods.
////////
region.Begin(CodeGenerationTools.GetResourceString("Template_RegionFunctionImports"));
foreach (EdmFunction edmFunction in container.FunctionImports)
{
IEnumerable<FunctionImportParameter> parameters = FunctionImportParameter.Create(edmFunction.Parameters, code, ef);
按照模板中的建议 How to: Customize Object Layer Code Generation 和 Generating Artifacts by Using Text Templates,修改模板即可生成正确的代码。
执行以下操作:
打开
DataContextEntityObjects.tt
文件搜索并替换以下内容:
保存文件
DataContextEntityObjects.tt
从现在开始,每次更新模型时,都会生成相应的 *.cs 文件,并在其中正确创建属性,因此过时警告消失。