如何永久修复升级到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 GenerationGenerating Artifacts by Using Text Templates中所建议的那样,可以修改模板以生成正确的代码。

请执行下列操作:

  1. 打开DataContextEntityObjects.tt文件
  2. 搜索并替换以下内容:
  3. 保存文件DataContextEntityObjects.tt

从现在开始,每次更新模型时,都会生成相应的* .cs文件,正确创建内部属性,因此过时的警告就会消失。

以上是关于如何永久修复升级到EF6后出现的“EdmFunctionAttribute is obsolete”警告?的主要内容,如果未能解决你的问题,请参考以下文章

将 EF 4 EDMX 升级到 EF 6

使用 Devart.MySql 将 EF6 升级到 EF Core 3

如何从实体框架 4 升级到 EF6?

将我的 ubuntu 服务器升级到 10.04 后如何修复我的虚拟主机设置

点击程序后显示(载入静态数据库失败)是啥原因

升级 PHP 版本后如何修复 Twig 文件中的 Html 标签问题