Таможенная собственность в обслуживании RIA не доступна на клиенте - PullRequest
1 голос
/ 25 марта 2011

У меня есть сущность с именем StatusUpdates. В этом нет самоприсоединения. Однако я хочу включить список InternalStatusUpdates, который имеет тип StatusUpdates (опять же я бы упомянул, что в базе данных нет самостоятельного соединения). Поэтому я создал частичный класс в том же пространстве имен и создал свойство с именем InternalStatusUpdates и включил в него атрибут [DataMember]. Но это все еще не появляется на клиенте. Это мой частичный класс, чтобы быть конкретным: -

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.Objects.DataClasses;
using System.Runtime.Serialization;
using System.ServiceModel.DomainServices.Server;
using System.ComponentModel.DataAnnotations;

namespace FMT.Data.Web
{
    public partial class StatusUpdate : EntityObject
    {

         private List<StatusUpdate> _internalListStatusUpdates = new List<StatusUpdate>();
         [DataMember]
         public List<StatusUpdate> InternalListStatusUpdates
         {
             get { return _internalListStatusUpdates; }
             set {
                 _internalListStatusUpdates = value;
                 OnPropertyChanged("InternalListStatusUpdates");
             }
         }
    }
}

Интересно, если я поменяю List<StatusUpdate> на List<string>, это доступно на клиенте! Как мне решить эту проблему?

Я думал, потому что это тип сущности, который мне нужно будет указать [Include]. Когда я это сделал, я получаю следующую ошибку: -

Invalid Include specification for member 'StatusUpdate.InternalListStatusUpdates'. Non-projection includes can only be specified on members with the AssociationAttribute applied.

Тогда я выбрал ассоциацию, и теперь моя собственность выглядит так: -

private List<StatusUpdate> _internalListStatusUpdates = new List<StatusUpdate>();
     [DataMember]
    [Include]
    [Association("internalUpdates", "StatusUpdatesId", "StatusUpdatesId")]
     public List<StatusUpdate> InternalListStatusUpdates
     {
         get { return _internalListStatusUpdates; }
         set {
             _internalListStatusUpdates = value;
             OnPropertyChanged("InternalListStatusUpdates");
         }
     }

, где StatusUpdatesId - мой первичный ключ в StatusUpdates Entity, а internalUpdates - просто произвольное имя. Теперь сборка прошла успешно, и свойство доступно на клиенте, но данные, которые я заполняю с сервера, недоступны на клиенте. Как мне это решить?

Заранее спасибо:)

Ответы [ 2 ]

7 голосов
/ 25 марта 2011

Третий параметр в AssociationAttribute - это имя свойства внешнего ключа в элементах списка.Важно помнить, что RIA Services помещает объекты в соответствующие им EntitySet<T>, а затем применяет фильтры к первичному ключу и внешнему ключу вместо использования истинных ссылок на другие объекты.

В данном случае вы будетевероятно, вам нужно определить свойство "ParentUpdatesId" для элементов списка и заполнить его первичным ключом вашего родительского StatusUpdate.

Пример:

StatusUpdate su = new StatusUpdate { StatusUpdatesId = 123 };
StatusUpdate child1 = new StatusUpdate { StatusUpdatesId = 1001, ParentUpdatesId = 123 };
StatusUpdate child2 = new StatusUpdate { StatusUpdatesId = 1002, ParentUpdatesId = 123 };
su.InternalListStatusUpdates.Add(child1);
su.InternalListStatusUpdates.Add(child2);

Ваша ассоциация будет выглядеть так:

[Include]
[Association("internalUpdates", "StatusUpdatesId", "ParentUpdatesId")]
public List<StatusUpdate> InternalListStatusUpdates { ... }
0 голосов
/ 12 января 2015

Я зашел на эту страницу после поиска ошибки «не включенные проекции» могут быть указаны только для участников с атрибутом ассоциации »

На всякий случай, если вы тоже ...включил включение по привычке, но в данном конкретном случае я соединял таблицу многие ко многим через таблицу ссылок и использовал RIA Services M2M, поэтому определил конкретное включение в другом месте с помощью проекции.Сообщение об ошибке, которое я получал, вводило в заблуждение, и удаление «Включить» исправило его.

...