在我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文件中修复了该错误消息,那么每次通过从数据库更新模型来更新模型时, 错误再次出现。
如何解决此问题永久(因此模型更新不会再次出现)?
答案 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,可以修改模板以生成正确的代码。
执行以下操作:
DataContextEntityObjects.tt
文件搜索并替换以下内容:
保存文件DataContextEntityObjects.tt
从现在开始,每次更新模型时,都会生成相应的* .cs文件,正确创建属性,因此过时的警告会消失。