Я пытаюсь вызвать пользовательскую функцию sql в своем операторе linq, используя платформу сущностей.Функция называется GetXml
и принимает 2 строки с именами «data» и «path» и возвращает строку.Моя модель данных называется XmlDataModel
.Я включил определение функции в файл edmx следующим образом:
<Function Name="GetXml" ReturnType="varchar(max)" Schema="dbo">
<Parameter Name="path" Type="varchar(max)" Mode="In" />
<Parameter Name="data" Type="varchar(max)" Mode="In" />
</Function>
В моем коде есть следующее объявление метода:
[EdmFunction("XmlDataModel.Store", "GetXml")]
public string GetXml(string path, string data)
{
throw new NotSupportedException("This method can only be used in a LINQ-toEntities query");
}
И следующий оператор linq:
var test = from e in this.ObjectContext.Events
where GetXml("a", "b") == "test" select e.EventSpecificData;
Моя проблема заключается в том, что при попытке просмотреть набор результатов появляется следующее сообщение:
Указанный метод 'System.String GetXml (System.String, System.String) 'для типа' RIAServicesLibrary1.Web.XmlDomainService 'нельзя преобразовать в выражение хранилища LINQ to Entities, поскольку экземпляр, для которого он вызывается, не является ObjectContext, для которого вычисляется запрос, в котором он используется.
Кажется, я осознаю, что у меня определен метод, потому что, когда я вынимаю тег [EdmFunction]
, я получаю другое сообщение.Есть идеи?