DomainService работает только с файлом EDMX?

Я хочу добавить новый класс обслуживания домена в vs2010. Я выбираю контекст базы данных своей структуры сущностей в диалоговом окне «Добавить новый класс службы домена», но он не показывает мне доступные сущности. Если я нажму «ОК», VS2010 выдаст мне следующее сообщение об ошибке:

---------------------------
Microsoft Visual Studio
---------------------------
Value cannot be null.

Parameter name: ssdlPath
---------------------------
OK   
---------------------------

Причина этого в том, что у меня нет файла EDMX (я пробовал с файлом EDMX, и это сработало). Вместо этого у меня есть отдельный файл csdl, msl и ssdl. Это потому, что я хочу поддерживать несколько баз данных.

Как я могу использовать класс LinqToEntitiesDomainService с моим контекстом данных? Объекты сущности и контекст данных генерируются с помощью шаблона POCO. Если я добавлю класс Domain Serive вручную (без использования мастера службы домена), я получаю ошибку времени компиляции, которая говорит в основном то же самое:

MSBuild\Microsoft\Silverlight\v4.0\Microsoft.Ria.Client.targets(303,5): error : Value cannot be null.
MSBuild\Microsoft\Silverlight\v4.0\Microsoft.Ria.Client.targets(303,5): error : Parameter name: ssdlPath

Кто-нибудь может помочь?


person Jeldrik    schedule 16.08.2010    source источник
comment
Кто-нибудь использовал LinqToEntitiesDomainService без файла EDMX? Я имею в виду, что генерация клиентского кода для Silverlight не работает. Как генерация клиента определяет ssdlPath?   -  person Jeldrik    schedule 17.08.2010
comment
Есть ли шанс, что это как-то заработает? У меня такая же проблема, и я в тупике.   -  person Alex Paven    schedule 14.03.2011
comment
К сожалению нет. В итоге я использовал класс DomainService (вместо класса LinqToEntitiesDomainService) и реализовал пользовательские методы.   -  person Jeldrik    schedule 14.03.2011


Ответы (1)


Выберите файл YorDoaminContainer.csdl, YorDoaminContainer.ssdl и файл YorDoaminContainer.msl, а затем в свойствах установите для параметра «Действие сборки» значение «Встроенный ресурс». Затем убедитесь, что у вас есть правильная строка подключения для этих трех ресурсов.

Например:

<connectionStrings>
    <add name="DomainModel" 
         connectionString="metadata=res://*/NameSpace.DomainController.csdl|res://*/NameSpace.DomainController.ssdl|res://*/NameSpace.DomainController.msl;
         provider=System.Data.SqlClient;provider connection string='Data Source=localhost;
         Initial Catalog=DB;Integrated Security=True;Connection Timeout=60;
         providerName="System.Data.EntityClient" />
</connectionStrings>
person Mostafa Dorrani    schedule 23.08.2010
comment
Если у вас есть один из трех, вам нужно убедиться, что все они встроены, иначе вы увидите ArgumentNullException csdlPath, ssdlPath или mslPath соответственно. - person Kyle McClellan; 23.08.2010
comment
Спасибо за ответ. У меня установлено действие сборки Embedded Resource для всех трех файлов. Имя файла играет роль? Имена файлов выглядят следующим образом: DomainController.csdl, DomainController.msl и DomainController.Oracle.ssdl. Я поместил их в подпапку под названием Model - person Jeldrik; 25.08.2010
comment
Еще раз спасибо, Мостафа. Но у меня есть рабочая строка подключения. Я могу сказать это, потому что у меня нет проблем с созданием экземпляров и использованием контекста моего домена сущности внутри класса DomianService (и это то, что я сейчас делаю). Кроме того, я получаю ошибку времени компиляции (не ошибку времени выполнения). - person Jeldrik; 26.08.2010