如何永久修复升级到EF6后出现的“EdmFunctionAttribute is obsolete”警告?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何永久修复升级到EF6后出现的“EdmFunctionAttribute is obsolete”警告?相关的知识,希望对你有一定的参考价值。
在我有upgraded a database first project from EF4 to EF 6.1.3后,我收到警告“EdmFunctionAttribute已经过时”:
'System.Data.Entity.Core.Objects.DataClasses.EdmFunctionAttribute'已废弃:'此属性已被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文件,正确创建内部属性,因此过时的警告就会消失。
以上是关于如何永久修复升级到EF6后出现的“EdmFunctionAttribute is obsolete”警告?的主要内容,如果未能解决你的问题,请参考以下文章
使用 Devart.MySql 将 EF6 升级到 EF Core 3