Объекты WCF DataService EF не найдены - PullRequest
2 голосов
/ 02 декабря 2010

У меня есть модель EDMX с сгенерированным контекстом.Теперь я сгенерировал библиотеку Self Tracking Entities, которая является отдельным проектом, и ссылался на это из модели EDMX.Также установите правильное пространство имен в контексте для того же пространства имен, что и для сущностей.

Теперь с этим работает все, кроме случаев, когда я пытаюсь создать службу данных WCF с этим контекстом.

Так что простосоздать новый ObjectContext и работать с ним напрямую работает нормально.

Но, сославшись на контекст + модель lib и сущности lib, я получаю следующую ошибку при загрузке службы

Сервер обнаружил ошибку при обработкезапрос.Сообщение об исключении: 'Value cannot be null. Parameter name: key'. See server logs for more details. The exception stack trace is:

Теперь я обнаружил, что это может произойти при использовании службы данных с внешней сущностью lib, и исправление переопределяет createcontext

с кодом

Свернуть

System.Data.Metadata.Edm.ItemCollection itemCollection;
        if (!context.MetadataWorkspace.TryGetItemCollection
              (System.Data.Metadata.Edm.DataSpace.CSSpace, out itemCollection))
        {
            var tracestring = context.CreateQuery<ClientDataStoreContainer>("ClientDataStoreContainer.DataSet").ToTraceString();
        }
        return context;

Теперь ошибка ушла, но я получаю следующее: Object mapping could not be found for Type with identity 'ClientDataStoreEntities.Data'. Эта ошибка возникает на .toTraceString в createcontext

ssdl-файл имеет определенный типСвернуть

<EntitySetMapping Name="DataSet">
    <EntityTypeMapping TypeName="IsTypeOf(ClientDataStoreEntities.Data)">

Таким образом, он должен загрузить тип ClientDataStoreEntities.Data, который является пространством имен и типом библиотеки STE, которую я сгенерировал из модели.

РЕДАКТИРОВАТЬ : с

var tracestring = context.CreateQuery<Data>("ClientDataStoreContainer.DataSet").ToTraceString();

Кажется, что загружаются все типы, однако теперь у службы нет методов, которые я могу вызвать.должно быть 2 DataSet и ОпубликованныйDataSet, но:

<service xml:base="http://localhost:1377/WcfDataService1.svc/">
−
<workspace>
<atom:title>Default</atom:title>
</workspace>
</service> 

- это то, что я получаю.

1 Ответ

0 голосов
/ 11 ноября 2011

Я столкнулся с той же проблемой (первая, которую вы упомянули).Я работал вокруг, используя предложение Джули Лерман в этой теме.Другое предложение не сработало для меня, хотя я буду больше экспериментировать с ними, поскольку решение Джули может повлиять на производительность, поскольку оно выполняется (и имеет определенную стоимость) для каждого запроса.

MSDN Не работает сPOCO ModelContainer, какие объекты находятся в другой сборке

Редактировать: Извините, только что понял, что вы использовали другое решение, упомянутое в этой теме.

...