如何永久修复升级到EF6后出现的“EdmFunctionAttribute is obsolete”警告?

问题描述 投票:0回答:1

在我有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文件中修复了该错误消息,那么每次通过从数据库更新模型来更新模型时,错误就会再次出现。

如何永久修复此问题(因此模型更新不会再次出现)?

c# visual-studio entity-framework-4 migration entity-framework-6
1个回答
2
投票

文件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文件,正确创建内部属性,因此过时的警告就会消失。

© www.soinside.com 2019 - 2024. All rights reserved.