Пользовательские функции SQL в Linq to Entities - PullRequest
2 голосов
/ 09 февраля 2012

Я пытаюсь вызвать пользовательскую функцию 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], я получаю другое сообщение.Есть идеи?

...