Краткого его:Материализуя операцию службы «службы WCF Data», который вызывает хранимую процедуру
Есть ли способ материализовать сервисные операции, которые используют Entity Framework, но сделать вызов хранимой процедуры вместо Linq к сущностям?
Детали:
У меня есть OData (WCF Service Data), которая имеет несколько сервисных операций в нем. Все работают нормально.
Сегодня я попытался добавить новую операцию обслуживания, и я не могу заставить ее работать в LinqPad.
Моя новая операция обслуживания отличается от других тем, что она вызывает хранимую процедуру (вместо использования Linq To Entities).
Это выглядит следующим образом:
[WebGet]
public IQueryable<MySproc_Result> GetTheDataINeed(long id)
{
return CurrentDataSource.MySproc(id).AsQueryable();
}
Когда я запускаю это в LINQPad так:
CreateQuery<MySproc_Result>"GetTheDataINeed").AddQueryOption("id", "91675L")
Я получаю следующее сообщение об ошибке:
Cannot materialize a collection of a primitives or complex without the type 'LINQPad.User.MySproc_Result' being a collection.
Примечание: Я побежал один из моих других операций обслуживания с использованием этого синтаксиса, и он работал нормально
Я решил посмотреть, будет ли он работать в браузере (в качестве URL-адреса). Я подключил эту и рабочую службу к Internet Explorer.
Различие было легко видеть сразу:
Bad
<?xml version="1.0" encoding="UTF-8"?>
<GetTheDataINeed xmlns:m="namespace removed for brevity">
<element m:type="MyModel.MySproc_Result">
<SomeData>Data Goes Here</SomeData>
<OtherData>Other Data Goes Here</OtherData>
...
Хорошо
<?xml version="1.0" encoding="utf-8" ?>
<feed xml:base="http://localhost:26257/MyServiceHere.svc/" Other xmlns ommited>
<id>http://localhost:26257/MyServiceHere.svc/ValidServiceOperation</id>
<title type="text">ValidServiceOperation</title>
<updated>2013-07-02T23:24:11Z</updated>
<link rel="self" title="ValidServiceOperation" href="ValidServiceOperation" />
<entry>
<id>http://localhost:26257/MyServiceHere.svc/Orders(156L)</id>
<category ... ommited />
<link lots of links ommited />
<title />
<updated>2013-07-02T23:24:11Z</updated>
<author>
<name />
</author>
<content type="application/xml">
<m:properties>
<d:SomeData m:type="Edm.Int64">Some Data Here</d:SomeData>
<d:OtherData m:type="Edm.DateTime">Other Data Here</d:OtherData>
...
Рабочая один, кажется, совсем немного мета данных, неработающий отсутствует. Я предполагаю, что материализатор потерпел неудачу. Я не знаю, как получить мою сервисную операцию, которая вызывает хранимую процедуру для получения этого XML-формата.
Есть ли способ материализовать операции обслуживания, которые используют Entity Framework, но выполнять вызов хранимой процедуры?
ПРИМЕЧАНИЕ:
- Я бег служб WCF Data 5.5.0 на сервере и на клиенте и имеет установки 5.3.0 оснастки.
- Я попытался запустить в консольном приложении (чтобы убедиться, что это не просто LINQPad)
Я попытался следующий синтаксис, как хорошо, и он не работает:
Execute<MySproc_Result>(new Uri("GetTheDataINeed?id=91675L", UriKind.Relative), "GET" , false)