2012-11-06 60 views
0

我已經使用Silverlight RIA服務在EF Code First中嵌套對象,我能夠在服務端獲取數據,但是當我在客戶端看到它的子對象爲null 。你能指導我什麼是錯的。代碼優先在客戶端的嵌套對象空EF RIA服務

[HasSelfValidation] 
public class Batch 
{ 

    public int BatchId { get; set; } 
    public string BatchName { get; set; } 
    [Include] 
    [Composition] 
    [Association("FK_Batch_BathSetItemSet", "BatchId", "BatchSetIdItemSetId")] 
    public virtual ICollection<BatchSetItemSet> BatchSetItemSets { get; set; } 
} 
public class BatchSetItemSet 
{ 

    public int BatchSetIdItemSetId { get; set; } 
    public int BatchId { get; set; } 
    public Nullable<int> ItemSetId { get; set; } 
    public string CreatedBy { get; set; } 
    public Batch Batch { get; set; } 
    [Include] 
    [Composition] 
    [Association("FK_BathSetItemSet_ItemSet", "BatchSetIdItemSetId", "ItemSetId")] 
    public ItemSet ItemSet { get; set; } 
} 
public class ItemSet 
{ 

    public int ItemSetId { get; set; } 
    public int CustodianId { get; set; } 
    public string ItemSetName { get; set; } 
    public virtual ICollection<BatchSetItemSet> BatchSetItemSets { get; set; } 
    [Include] 
    [Composition] 
    [Association("FK_ItemSet_Custodian", "ItemSetId", "CustodianId")] 
    public virtual Custodian Custodian { get; set; } 
} 

和服務電話是:this.DbContext.Batches.Include("BatchSetItemSets.ItemSet.Custodian").Where(x => x.BatchId == batchId).SingleOrDefault();

+0

你是如何加載你的實體客戶端?請發送代碼 – mCasamento

+0

對不起,我沒有正確地得到您的問題,我有WCF RIA服務,我打電話使用以下調用:this.DbContext.Batches.Include(「BatchSetItemSets.ItemSet.Custodian」)。其中(x = > x.BatchId == batchId).SingleOrDefault(); – Deepak

回答

0

你是親近的屬性,但它們需要改變:

[HasSelfValidation] 
public class Batch 
{ 
    public int BatchId { get; set; } 
    public string BatchName { get; set; } 

    [Include] 
    [Composition] 
    [Association("FK_Batch_BathSetItemSet", "BatchId", "BatchId", IsForeignKey = false)] 
    public virtual ICollection<BatchSetItemSet> BatchSetItemSets { get; set; } 
} 

public class BatchSetItemSet 
{ 
    public int BatchSetIdItemSetId { get; set; } 
    public int BatchId { get; set; } 
    public Nullable<int> ItemSetId { get; set; } 
    public string CreatedBy { get; set; } 

    [Include] 
    [Association("FK_Batch_BathSetItemSet", "BatchId", "BatchId")] 
    public Batch Batch { get; set; } 

    [Include] 
    [Association("FK_BathSetItemSet_ItemSet", "ItemSetId", "ItemSetId")] 
    public ItemSet ItemSet { get; set; } 
} 

public class ItemSet 
{ 
    public int ItemSetId { get; set; } 
    public int CustodianId { get; set; } 
    public string ItemSetName { get; set; } 

    [Include] 
    [Composition] 
    [Association("FK_BathSetItemSet_ItemSet", "ItemSetId", "ItemSetId", IsForeignKey = false)] 
    public virtual ICollection<BatchSetItemSet> BatchSetItemSets { get; set; } 

    [Include] 
    [Association("FK_ItemSet_Custodian", "CustodianId", "CustodianId")] 
    public virtual Custodian Custodian { get; set; } 
} 

AssociationAttribute .ctor被定義爲:

AssociationAttribute(string name, string thisKey, string otherKey) 

它應該被配置爲:

  • name:屬性對其他名稱:屬性的這個對象,表示鍵或外鍵
  • otherKey上的姓名:由關係的每一端
  • thisKey共享的唯一名稱代表鍵或外鍵的對象
  • IsForeignKeyAssociationAttribute上的一個屬性,用於指示此關係的結尾是主鍵還是外鍵。它默認爲true(意思是這個導航屬性是一個外鍵)。通過將其設置爲false,您可以向WCF RIA指示此對象包含主鍵。對於給定name的所有AssociationAttribute使用情況,只允許有一個使用IsForeignKey = false。否則,你會得到一個構建錯誤。
+0

感謝@Chapel,不幸的是我們認爲這與CodeFirst方法有關,並且由於我們考慮轉移到EDMX方法的一些其他問題並修復了它。但非常感謝你澄清。如果發生任何問題,我一定會在POC中嘗試這個方法並回復你。再次感謝您的時間 – Deepak