I am getting the warning "EdmFunctionAttribute is obsolete" after I have upgraded a database first project from EF4 to EF 6.1.3:
'System.Data.Entity.Core.Objects.DataClasses.EdmFunctionAttribute' is obsolete: 'This attribute has been replaced by System.Data.Entity.DbFunctionAttribute.' C:\{myProjectPath}\DataContextEntityObjects.cs
The attribute is used in various places like
[EdmFunction("DataContext", "Split")]
public IQueryable<Split_Result> Split(global::System.String rowData, global::System.String splitOn)
{
// ... auto-generated code ...
}
If you fix that in the *.cs-files mentioned by the error message, then each time when the model gets updated via update the model from database, the error comes up again.
How can this issue permanently be fixed (so a model update doesn't bring it up again)?
The file
DataContextEntityObjects.cs
is auto-generated fromDataContextEntityObjects.tt
and uses the attribute in various places likeSince it is auto-regenerated each time when the model gets updated via update the model from database, the solution was to modify the T4 template as follows:
I've identified the relevant part in the T4 file starts here (lines 214-283):
As suggested in the template How to: Customize Object Layer Code Generation and Generating Artifacts by Using Text Templates, the template can be modified to generate the right code.
Do the following:
DataContextEntityObjects.tt
fileSearch and replace the following:
Save the file
DataContextEntityObjects.tt
From now on, each time you update the model, this will generate the corresponding *.cs file, create the attribute inside correctly and hence the obsolete warning goes away.