Хорошо, так что я наконец понял, что я делаю не так.Итак, я собираюсь дать краткое, но подробное объяснение того, как настроить «POCO DomainService».Я уверен, что это не единственный способ, но это самый простой способ, который я нашел, и он работает.И, надеюсь, это сэкономит кому-то еще на несколько недель головных болей и разочарований.
В общем, моя ситуация состояла в том, что у меня был тип MainBusinessLine, у которого была коллекция Groups и коллекция DefaultLOBs.Но то, что я не включил, было то, что у меня был тип GroupsReference, который имел свойство MainBusinessLineID и свойство GroupID.Когда я извлек свои данные, я пошел дальше и прошел по типам GroupsReference и добавил группы к родительской группе 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>();
}
}
И еще раз, все, что я делаю, это получаю данные из базы данных.Используйте отражение для создания экземпляров каждого типа, установите значения свойств (коллекции не заполнены) и добавьте их в список.Затем верните списки клиенту.Остальное все сделано сгенерированным кодом.