升級 Entity Framework

  • 130
  • 0

最符合的多載方法 'System.Data.Entity.Core.Objects.ObjectContext.ExecuteFunction<string>(string, params System.Data.Entity.Core.Objects.ObjectParameter[])' 有一些無效的引數

在專案 .edmx加入新 table,更新,重新編譯,噴錯…我都還沒開始寫 code就有狀況是哪招?囧a

錯誤訊息:「最符合的多載方法 'System.Data.Entity.Core.Objects.ObjectContext.ExecuteFunction<string>(string, params System.Data.Entity.Core.Objects.ObjectParameter[])' 有一些無效的引數」,出錯的地方是自動產生出來的程式碼。

解法:參考此文章:https://msdn.microsoft.com/zh-tw/data/upgradeEF6
解決後推測原因應該是專案之前用舊版 EF,升級的時候,已存在的 .edmx不會自動觸發更新(相當合理…)

我沒有照著做…版控說我沒有權限簽出檔案什麼鬼的,
跳過步驟三刪除 <edmx_file_name>.tt and <edmx_file_name>.Context.tt,
直接看步驟四:「The general rule for namespace changes is that any type in System.Data.* is moved to System.Data.Entity.Core.*.」
在 *.Context.tt看到這段程式碼:

<#
if (container.FunctionImports.Any())
{
#>
using System.Data.Objects;
using System.Data.Objects.DataClasses;
using System.Linq;
<#
}
#>

改成:

<#
if (container.FunctionImports.Any())
{
#>
using System.Data.Entity.Core.Objects;
using System.Data.Entity.Core.Objects.DataClasses;
using System.Linq;
<#
}
#>

就搞定啦。