Добавляет ли IncludeAttribute какое-либо значение по сравнению с методами ObjectQuery и DbSet Include? - PullRequest
0 голосов
/ 08 августа 2011

Я использую службы WCF RIA в сочетании с Entity Framework 4.0.

Чтобы гарантировать, что связанные объекты сделают его безопасным для клиента, мне нужно сначала включить их, используя ObjectQuery (Of T) .Include или DbSet (Of TResult) .Include методы в моем DomainService . Мне также нужно добавить IncludeAttribute к свойствам навигации в классах метаданных.

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

Я рассматриваю возможность внесения изменений в шаблоны T4, чтобы все навигационные свойства автоматически добавлялись в атрибут IncludeAttribute.

Я был немного обеспокоен тем, что объекты, которые были оставлены после предыдущих запросов, непреднамеренно отправленных клиенту, но я понимаю, что DomainService не имеет состояния, что должно означать, что это не так, верно?

Смысл имени "DomainService" заключается в том, что оно не имеет состояния объект, который представляет собой определенный домен, который характерен для моего применение.

Другой подход , который я видел, состоял в том, чтобы автоматически применять атрибуты Включить к любым файлам метаданных в проекте. Мне все еще нужно создать файлы метаданных.

Есть ли другие опасности, которых я не вижу? Есть ли лучший способ добиться того же эффекта?

Ответы [ 3 ]

2 голосов
/ 08 августа 2011

Эта тема помогла мне понять причину этого. надеюсь, это поможет.

1 голос
/ 09 августа 2011

В этом случае, я думаю, вы определили пространство потенциальной проблемы. Если включить IncludeAttributes по умолчанию, ваш сервис будет возвращать любой граф объектов, который вы собрали в памяти.

Лучший способ реализовать это решение - создать пользовательский DomainServiceDescriptionProvider (, вот хороший пример ), который выводит атрибут IncludeAttribute для правильных типов свойств без необходимости поддерживать файлы метаданных в актуальном состоянии. дата.

0 голосов
/ 09 августа 2011

Я изменил шаблон EDMX T4 для автоматического применения атрибута IncludeAttribute, и он работает как положено.

Одним из преимуществ ручного применения атрибутов, которые я идентифицировал на этом пути, было то, что вы можете контролировать объем кода, который генерируется на клиенте. Объекты, которые используются только на сервере, могут быть исключены.

В моем случае это не было проблемой.

...