2010-11-09 51 views
1

我有型集團一個ObservableCollection和方法,我從一個調用的DomainService回報MainBusinessLines的可查詢列表MainBusinessLine類型。因此,在此方法中,我已確認將所有適當的組添加到MainBusinessLines組集合中。但是,當實體加載到客戶端Silverlight應用程序中時,它幾乎全部丟失了。但啓發器是MainBusinessLine有另一個集合,它在客戶端加載操作之後包含所有適當的實體。而我的關聯屬性也是一樣的,這意味着thisKey和otherKey的參數設置相似。POCO的DomainService和客戶端DomainContext EntityCollections缺少實體

我也在創造,而不是使用的EntityFramework POCO類。這裏是我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"); 
     } 
    } 
} 

這裏是LOB和團體類:

[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」的詳細說明。我相信這不是唯一的方法,但它是我找到的最簡單的方法,而且很有效。希望這會爲其他人節省數週的頭痛和挫折。

所以基本上,我的情況是,我不得不說有一個組收集和DefaultLOBs集合MainBusinessLine類型。但我沒有包括的是我有一個GroupsReference類型,它有一個MainBusinessLineID屬性和一個GroupID屬性。當我檢索到我的數據時,我繼續循環瀏覽GroupsReference類型,並將這些Groups添加到MainBusinessLine的GroupsCollection中。對於DefaultLOBsCollection也是如此。所以我在從DomainService「查詢」之前填充集合,並且出現了這個問題。

經過思考並閱讀我能找到的所有內容,編碼之神終於對我產生憐憫,並給我答案。我將檢索數據並創建每個類型的列表而不是填充任何作爲關聯的集合屬性。然後在適當的查詢方法中返回Lists AsQuerable(),並且客戶端上生成的實體將具有完整的EntityCollections。

所以在最後,如果您有包含和關聯屬性設定正確的鑰匙,而不是試圖迫使數據,那麼你應該有成功。我將包含我的新示例代碼,希望這會對其他人有所幫助。

[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

您的public ObservableCollection<LOBs> DefaultLOBs屬性上的XmlIgnoreSoapIgnore屬性會是您沒有看到「MainBusinessLines」集合的原因嗎?

+0

不,我已經找出原因。我有那些屬性,因爲我正在嘗試不同的場景。只是從來沒有把它們帶走。 – jhorton 2010-11-12 13:47:16