Частичный класс сущности с расширением shared.vb, не связанный с «другим» частичным классом в клиенте с использованием RIA Services - PullRequest
0 голосов
/ 21 апреля 2011

Я расширил класс сущностей Entity Framework 4 с вычисляемым свойством в частичном классе.Этот элемент недоступен на клиенте, которому объекты предоставляются через службы WCF RIA.

Решение этой проблемы при использовании C #, по-видимому, заключается в изменении расширения файла частичного класса с .cs на .shared..cs.Я попробовал это с моим решением VB.Net (.vb to .shared.vb) и получил длинный список ошибок.Я полагаю, что произошло то, что частичный класс потерял свою связь с сущностью на клиенте - он унаследован от объекта, а не от EntityObject.

Мое лучшее предположение состоит в том, что это связано с тем, как VB.Net обрабатывает пространства имен,Каждый проект имеет «корневое пространство имен», которое предшествует всему, что определено в файле кода.C # имеет «Пространство имен по умолчанию», которое является пространством имен, в которое по умолчанию помещаются новые типы - с помощью оператора пространства имен в файле.

Частичному классу, вероятно, предшествует пространство имен клиента, которое помещает его впространство имен, отличное от объекта, с которым он связан на сервере.

Существуют ли какие-либо способы расширения объекта таким образом, чтобы эти расширения были доступны на клиенте через службы WCF RIA и VB.Net?

1 Ответ

1 голос
/ 14 июня 2011

Существует обходной путь для этой проблемы, который зависит от некоторой логики в шаблонах T4, которые генерируют классы сущностей.

    If(Not String.IsNullOrEmpty(namespaceName)) Then
#>

Namespace <#=namespaceName#>

<#

Сущности создаются в пространстве корневых имен, определенном на уровне проекта, если онодоступный, и в пределах пространства имен, ускоренного в файле EDMX, в противном случае (кажется, что метод CodeGenerationTools.VsNamespaceSuggestion справляется с этим).

Если доступно корневое пространство имен, то в этом пространстве имен должны находиться закодированные частичные классы, чтобысопоставьте сгенерированные - у них нет декларации пространства имен на уровне файлов.Когда эти файлы являются «общими» для клиента (через расширение shared.vb), они попадают в корневое пространство имен клиента, тогда как сгенерированные сущности попадают в пространство имен, которое состоит из корневого пространства имен клиента и корневого пространства имен сервера.

Удаление корневого пространства имен из проекта сервера и последующее явное объявление пространства имен EDMX в кодированных частичных классах приводит к тому, что и эти общие файлы, и сгенерированные права попадают в одно и то же пространство имен на клиенте (корень клиентаПространство имен плюс пространство имен EDMX).

Примечание: Шаблон «ADO.Net EntityObject Generator» (добавлен с помощью элемента контекстного меню «Добавить сгенерированный код ...» в конструкторе EDMX).Кажется, ведет себя не так, как у дизайнера.Он не генерировал объявление пространства имен в моих тестах, даже если я очистил корневое пространство имен на уровне проекта.Я не уверен в причине этого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...