2

Я нашел много информации об использовании Entity Framework 6 с Sql CE 4 и об использовании Entity Framework 4 с Sql CE 4 и 3.5, но использование Entity Framework 6 с Sql CE 3.5 - это другое дело. Насколько я могу судить, CE 3.5 поставляется с поставщиком для Entity Framework 4 в System.Data.SqlServerCe.Entity.dll. Этот провайдер использует старую версию базовых классов, и если я пытаюсь использовать его, я получаю следующее исключение:Entity Framework 6 с Sql Server Compact 3.5 SP2?

System.InvalidOperationException: В элементе «Instance» в Entity Framework типа провайдера «System.Data. SqlServerCe.SqlCeProviderServices, System.Data.SqlServerCe.Entity, Version = 3.5.1.0, Culture = neutral, PublicKeyToken = 89845dcd8080cc91 'не возвратил объект, который наследуется от' System.Data.Entity.Core.Common.DbProviderServices '. Поставщики Entity Framework должны наследовать от этого класса, а член «Экземпляр» должен вернуть экземпляр singleton поставщика. Это может быть связано с тем, что провайдер не поддерживает Entity Framework 6 или новее; см. http://go.microsoft.com/fwlink/?LinkId=260882 для получения дополнительной информации.

Это имеет смысл и указывает на то, что мне нужен поставщик для Entity Framework 6 для Sql Server CE 3.5 SP2. Кажется, я не могу найти такую ​​вещь. Пакет nuget EntityFramework.SqlServerCompact, по-видимому, ссылается только на Sql Compact 4 во всех его версиях. Существует ли такой провайдер уже существует? Если да, то где это можно найти? Кажется, мне трудно найти его. Если нет, было бы реалистично подумать об их реализации, используя код в одном для CE 4 со ссылкой на 3.5, или же разница между CE 3.5 и 4 слишком отличается, чтобы это было просто? Есть ли другой способ?

Мне нужно использовать 3.5 из-за необходимости использования репликации слиянием, которая не поддерживается в 4, и хотела бы использовать Entity Framework. Если нет прямого ответа на этот вопрос, я, вероятно, буду использовать что-то другое, кроме Entity Framework.

ответ

8

ОК, это второй запрос, который я слышу для этого, давайте это сделаем. Я разблокирую код и сделаю пакет Nuget для 3.5 - как насчет «EntityFramework.SqlServerCompact.Legacy»? «Требуется только одно» изменение кода - факт, что 3.5 не поддерживает ORDER BY..FETCH..OFFSET синтаксис (т. Е. Пейджинг), вызываемый с помощью Take and Skip. Вас это интересовало бы?

UPDATE: пакет теперь доступен на NuGet http://www.nuget.org/packages/EntityFramework.SqlServerCompact.Legacy

+0

да, это действительно интересует меня и будет то, что я ищу. пейджинг меня не интересует для моего текущего проекта. я готов внести свой вклад - но звучит так, как будто это не так много, учитывая ваше утверждение о том, что кода нечего изменить. имя пакета, в котором вы расположились, работает для меня. –

+0

Отлично, я уже на нем - вместо этого вы использовали LINQ to SQL? – ErikEJ

+0

спасибо, эрик, это здорово. я рассмотрел альтернативы и, вероятно, использовал бы nhibernate, если бы не был этот путь к тому, чтобы работать с инфраструктурой сущностей. –

Смежные вопросы