2010-11-09 3 views
1

У меня есть тип MainBusinessLine с ObservableCollection группы типов и метод, который я вызываю из DomainService, который возвращает список запросов MainBusinessLines. Поэтому в этом методе я подтвердил, что все соответствующие группы добавляются в коллекцию групп MainBusinessLines. Но когда объекты загружаются в приложение silverlight для клиента, он почти не видит их. Но кикер - это то, что MainBusinessLine имеет другую коллекцию и содержит все соответствующие объекты после операции загрузки клиента. И мои атрибуты ассоциации одинаковы, что означает, что параметры для этогоKey и otherKey установлены одинаковыми.POCO DomainService и Client DomainContext EntityCollections отсутствуют Объекты

Я также создаю классы POCO вместо использования EntityFramework. Вот пример из моего класса MainBusinessLine:

[Serializable, 
DataContract] 
public class MainBusinessLine : BaseDataContract 
{ 
    public MainBusinessLine() 
    { 

    } 

    private int _MainBusinessLineID; 
    [Key, 
    DataMember, 
    Required] 
    public int MainBusinessLineID 
    { 
     get 
     { 
      return _MainBusinessLineID; 
     } 
     set 
     { 
      if (_MainBusinessLineID == value) 
       return; 

      ReportPropertyChanging("MainBusinessLineID"); 
      _MainBusinessLineID = value; 
      ReportPropertyChanged("MainBusinessLineID"); 
     } 
    } 

    private ObservableCollection<LOBs> _DefaultLOBs; 
    [DataMember, 
    XmlIgnore, 
    SoapIgnore, 
    Include, 
    Association("DefaultLOBsCollection", "MainBusinessLineID", "MainBusinessLineID")] 
    public ObservableCollection<LOBs> DefaultLOBs 
    { 
     get 
     { 
      return _DefaultLOBs; 
     } 
     set 
     { 
      ReportPropertyChanging("DefaultLOBs"); 
      _DefaultLOBs = value; 
      ReportPropertyChanged("DefaultLOBs"); 
     } 
    } 



    private ObservableCollection<Groups> _Groups; 
    [DataMember, 
    Include, 
    Association("GroupsCollection", "MainBusinessLineID", "MainBusinessLineID")] 
    public ObservableCollection<Groups> Groups 
    { 
     get 
     { 
      return _Groups; 
     } 
     set 
     { 
      ReportPropertyChanging("Groups"); 
      _Groups = value; 
      ReportPropertyChanged("Groups"); 
     } 
    } 
} 

А вот LOBS и группы классов:

[Serializable, 
DataContract] 
public class LOBs : BaseDataContract 
{ 
    private int _LOBID; 
    [Key, 
    DataMember, 
    Required] 
    public int LOBID 
    { 
     get 
     { 
      return _LOBID; 
     } 
     set 
     { 
      if (_LOBID == value) 
       return; 

      ReportPropertyChanging("LOBID"); 
      _LOBID = value; 
      ReportPropertyChanged("LOBID"); 
     } 
    } 

    private int _GroupID; 
    [DataMember] 
    public int GroupID 
    { 
     get 
     { 
      return _GroupID; 
     } 
     set 
     { 
      if (_GroupID == value) 
       return; 

      ReportPropertyChanging("GroupID"); 
      _GroupID = value; 
      ReportPropertyChanged("GroupID"); 
     } 
    } 

    private int _MainBusinessLineID; 
    [DataMember] 
    public int MainBusinessLineID 
    { 
     get 
     { 
      return _MainBusinessLineID; 
     } 
     set 
     { 
      if (_MainBusinessLineID == value) 
       return; 

      ReportPropertyChanging("MainBusinessLineID"); 
      _MainBusinessLineID = value; 
      ReportPropertyChanged("MainBusinessLineID"); 
     } 
    } 
} 

[Serializable, 
DataContract] 
public class Groups : BaseDataContract 
{ 
    private int _GroupID; 
    [Key, 
    DataMember, 
    Required] 
    public int GroupID 
    { 
     get 
     { 
      return _GroupID; 
     } 
     set 
     { 
      if (_GroupID == value) 
       return; 

      ReportPropertyChanging("GroupID"); 
      _GroupID = value; 
      ReportPropertyChanged("GroupID"); 
     } 
    } 

    private int _MainBusinessLineID; 
    [DataMember] 
    public int MainBusinessLineID 
    { 
     get 
     { 
      return _MainBusinessLineID; 
     } 
     set 
     { 
      if (_MainBusinessLineID == value) 
       return; 

      ReportPropertyChanging("MainBusinessLineID"); 
      _MainBusinessLineID = value; 
      ReportPropertyChanged("MainBusinessLineID"); 
     } 
    } 
} 

Может кто-то пожалуйста, скажите мне, что я, возможно, здесь не так? У меня такое чувство, что это связано с тем, как я устанавливаю атрибуты ассоциации. Спасибо

ответ

1

Итак, я, наконец, понял, что я делаю неправильно. Поэтому я дам краткое, но подробное объяснение того, как настроить «POCO DomainService». Я уверен, что это не единственный способ, но это самый простой способ, который я нашел, и он работает. И, надеюсь, это спасет кого-то еще на две недели от головных болей и разочарований.

В основном, моя ситуация заключалась в том, что у меня был тип MainBusinessLine, в котором была коллекция групп и коллекция DefaultLOBs. Но я не включал в себя то, что у меня был тип GroupReference, у которого было свойство MainBusinessLineID и свойство GroupID. Когда я получил свои данные, я пошел вперед и перешел через типы GroupReference и добавил группы в родительский GroupCollection основного журнала MainBusinessLine. И то же самое для DefaultLOBsCollection. Поэтому я собирал коллекцию до того, как они были «запрошены» из DomainService, и возникла проблема.

Подумав об этом и прочитав все, что смог найти, Боги Кодирования наконец сжалились надо мной и поразили меня ответом. Я хотел бы получить данные и создать списки каждого типа БЕЗ, заполняющий любые свойства коллекции, которые являются ассоциациями. А затем верните списки AsQuerable() в их подходящем методе запросов, а сущности, созданные на клиенте, будут полностью заполнены EntityCollections.

Итак, если у вас есть атрибуты Include и Association, установленные с правильными ключами, и не пытайтесь заставить данные, тогда вы должны иметь успех. Я включу свой новый образец кода, и, надеюсь, это поможет кому-то другому.

[Serializable, 
DataContract] 
public class MainBusinessLine : BaseDataContract 
{ 
    Int32 _MainBusinessLineID; 
    [Key, 
    DataMember, 
    Required] 
    public Int32 MainBusinessLineID 
    { 
     get 
     { 
      return _MainBusinessLineID; 
     } 
     set 
     { 
      if (_MainBusinessLineID == value) 
       return; 

      _MainBusinessLineID = value; 
      ReportPropertyChanged("MainBusinessLineID"); 
     } 
    } 

    ObservableCollection<GroupsReference> _GroupsReferenceCollection; 
    [DataMember, 
    Include, 
    Association("GroupsReferenceCollection", "MainBusinessLineID", "MainBusinessLineID")] 
    public ObservableCollection<GroupsReference> GroupsReferenceCollection 
    { 
     get 
     { 
      return _GroupsReferenceCollection; 
     } 
     set 
     { 
      _GroupsReferenceCollection = value; 
      ReportPropertyChanged("GroupsReferenceCollection"); 
     } 
    } 
} 

[Serializable, 
DataContract] 
public class GroupsReference : BaseDataContract 
{ 
    Int32 _GroupsReferenceID; 
    [Key, 
    DataMember, 
    Required] 
    public Int32 GroupsReferenceID 
    { 
     get 
     { 
      return _GroupsReferenceID; 
     } 
     set 
     { 
      if (_GroupsReferenceID == value) 
       return; 

      _GroupsReferenceID = value; 
      ReportPropertyChanged("GroupsReferenceID"); 
     } 
    } 

    Int32 _MainBusinessLineID; 
    [DataMember, 
    Required] 
    public Int32 MainBusinessLineID 
    { 
     get 
     { 
      return _MainBusinessLineID; 
     } 
     set 
     { 
      if (_MainBusinessLineID == value) 
       return; 

      _MainBusinessLineID = value; 
      ReportPropertyChanged("MainBusinessLineID"); 
     } 
    } 

    Int32 _GroupID; 
    [DataMember, 
    Required] 
    public Int32 GroupID 
    { 
     get 
     { 
      return _GroupID; 
     } 
     set 
     { 
      if (_GroupID == value) 
       return; 

      _GroupID = value; 
      ReportPropertyChanged("GroupID"); 
     } 
    } 
} 

[Serializable, 
DataContract] 
public class Group : BaseDataContract 
{ 
    Int32 _GroupID; 
    [Key, 
    DataMember, 
    Required] 
    public Int32 GroupID 
    { 
     get 
     { 
      return _GroupID; 
     } 
     set 
     { 
      if (_GroupID == value) 
       return; 

      _GroupID = value; 
      ReportPropertyChanged("GroupID"); 
     } 
    } 

    ObservableCollection<GroupsReference> _GroupsReferenceCollection; 
    [DataMember, 
    Include, 
    Association("GroupsReferenceCollection", "GroupID", "GroupID")] 
    public ObservableCollection<GroupsReference> GroupsReferenceCollection 
    { 
     get 
     { 
      return _GroupsReferenceCollection; 
     } 
     set 
     { 
      _GroupsReferenceCollection = value; 
      ReportPropertyChanged("GroupsReferenceCollection"); 
     } 
    } 
} 

[EnableClientAccess(RequiresSecureEndpoint = false)] 
public class DentalAdminPortalDomainService : DomainService 
{ 

    public DentalAdminPortalDomainService() 
    { 
     AppDomain.CurrentDomain.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal); 
    } 


    [Query] 
    public IQueryable<MainBusinessLine> GetMainBusinessLines() 
    { 
     return DataRepository.GetMainBusinessLines().AsQueryable<MainBusinessLine>(); 
    } 

    [Query] 
    public IQueryable<Groups> GetGroups() 
    { 
     return DataRepository.GetGroups().AsQueryable<Groups>(); 
    } 

    [Query] 
    public IQueryable<GroupLOBList> GetGroupsReference() 
    { 
     return DataRepository.GetGroupsReferences().AsQueryable<GroupsReference>(); 
    } 
} 

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

0

Не могли бы вы использовать атрибуты XmlIgnore и SoapIgnore на своем public ObservableCollection<LOBs> DefaultLOBs, если вы не видите свою коллекцию «MainBusinessLines»?

+0

Нет, я выяснил причину. У меня есть эти атрибуты, потому что я тестировал разные сценарии. Просто никогда их не снимали. – jhorton

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

  • Нет связанных вопросов^_^