функции, определяемые моделью, обсуждаются здесь:
- https://msdn.microsoft.com/en-us/library/vstudio/dd456857(v=vs.110).aspx
- https://msdn.microsoft.com/en-us/library/dd456812.aspx
- Сопоставление функции Entity Framework 6 Code First
- http://www.c-sharpcorner.com/UploadFile/ff2f08/model-defined-function/
они поддерживаются EF6.1.2?
Я просматриваю материалы Edm/DbModel и не могу понять, где должен анализироваться элемент «Function» в csdl, потому что он не попадает в EdmModel (EdmModel.AddItem( EdmFunction) не вызывается)
ExpressionConverter.FindFunction просматривает EdmModel._functions, а _functions добавляется только с помощью EdmModel.AddItem(EdmFunction) и вызывается только методом расширения EdmModelExtensions.AddFunction(), и я не могу найти нигде в исходном коде EntityFramework, который вызывает эту функцию . Я должен упустить что-то простое...
больше: я отказался от определения функции в edmx, и теперь я программно создаю свою EdmFunction и добавляю ее в собственный метод IConceptualModelConvention.Apply():
class CustomFunctionConvention : IConceptualModelConvention<EdmModel>
{
public void Apply(EdmModel item, DbModel model)
{
var functionPayload = new EdmFunctionPayload () {
CommandText = "CAST (strValue AS int)",
Parameters = new [] {
FunctionParameter.Create("strValue", PrimitiveType.GetEdmPrimitiveType(PrimitiveTypeKind.String).GetEdmPrimitiveType(), ParameterMode.In),
},
ReturnParameters = new [] {
FunctionParameter.Create("ReturnValue", PrimitiveType.GetEdmPrimitiveType(PrimitiveTypeKind.Int32).GetEdmPrimitiveType(), ParameterMode.ReturnValue),
},
IsComposable = true,
};
var function = EdmFunction.Create("ParseInt", "MyNamespace", DataSpace.CSpace, functionPayload, null);
model.ConceptualModel.AddItem(function);
}
}
но теперь я получаю кучу ошибок схемы в EdmItemCollection.LoadItems() :
Schema specified is not valid. Errors:
(0,0) : error 0005: The 'Aggregate' attribute is not allowed.
(0,0) : error 0005: The 'BuiltIn' attribute is not allowed.
(0,0) : error 0005: The 'NiladicFunction' attribute is not allowed.
(0,0) : error 0005: The 'IsComposable' attribute is not allowed.
(0,0) : error 0005: The 'ParameterTypeSemantics' attribute is not allowed.
(0,0) : error 0005: The 'Schema' attribute is not allowed.
(0,0) : error 0005: The 'Mode' attribute is not allowed.