如何永久修复" EdmFunctionAttribute已过时"警告,升级到EF6后发生?

时间:2015-03-17 08:31:17

标签: c# visual-studio entity-framework-4 migration entity-framework-6

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

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

1 个答案:

答案 0 :(得分: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 Generation中所建议的那样 Generating Artifacts by Using Text Templates,可以修改模板以生成正确的代码。

执行以下操作:

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

    EdmFunction replacement

  3. 保存文件DataContextEntityObjects.tt

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