0

我有一個域服務類,如下包括兒童實體集合在Silverlight領域服務

[MetadataTypeAttribute(typeof(Question.QuestionMetadata))] 
public partial class Question 
{  
    internal sealed class QuestionMetadata 
    { 
     private QuestionMetadata() 
     { 
     } 

     [Include] 
     public EntityCollection<Answer> Answers { get; set; } 

     public EntityCollection<AssignmentsQuestionsMapping> AssignmentsQuestionsMappings { get; set; } 

     public int Marks { get; set; } 

     public string QuestionDescription { get; set; } 

     public long QuestionID { get; set; } 

     public string QuestionTitle { get; set; } 

     public EntityCollection<UserQuestionAnsweredMapping> UserQuestionAnsweredMappings { get; set; } 
    } 
} 

而且我已經在域名服務下面的查詢

public IQueryable<Question> GetQuestionsByAssignmentId(long assignmentId) 
     { 
      var questions = from q in this.ObjectContext.Questions.Include("Answers") 
          join qam in this.ObjectContext.AssignmentsQuestionsMappings on q.QuestionID equals qam.QuestionID 
          join assign in this.ObjectContext.Assignments on qam.AssignmentID equals assign.AssignmentID 
          where assign.AssignmentID == assignmentId 
          select q; 

      return questions; 
     } 

據我所知,如果你想在域服務查詢中包含子實體,然後在實體的元數據文件中設置[包含]屬性,並通過.Include(「ChildEntityCollectionName」)將其包含在查詢中。

我已經完成了他們,但我仍然沒有收到我的客戶端的ChildEntity集合。 我在想什麼?

+0

你有一個外鍵在數據庫中的問題和答案之間建立的更多信息?如果是這樣,你的模型(ConceptualEntityModel)自實施以來是否已更新? – Chris 2012-01-27 17:28:45

+0

是答案表的問題ID爲forgein鍵。奇怪的是當我返回this.ObjectContext.Questions.Include(「答案」),即沒有在查詢中的linq我得到的問題實體在客戶端的答案實體。任何想法發生了什麼? – Sumit 2012-01-28 05:09:32

+0

你可以直接在SQL中運行相同的查詢,並驗證你正在得到結果嗎?您需要驗證數據庫中的數據是否符合您在LINQ中的假設。 – 2012-01-30 17:28:37

回答

1

你幾乎在那裏。您需要添加關聯屬性以幫助WCF RIA瞭解QuestionAnswer是如何關聯的。

[Include] 
[Association("Question_Answer", "QuestionID", "ParentQuestionID", IsForeginKey=false)] 
public EntityCollection<Answer> Answers { get; set; } 

這假設你的實體共享一個外鍵。

public class Question 
{ 
... 
    [Key] 
    public long QuestionID { get; set;} 
... 
} 

public class Answer 
{ 
... 
    [Key] 
    public long AnswerID { get; set;} 

    public long ParentQuestionID { get; set;} 
... 
} 

你可以看到RIA Services: Inserting multiple presentation-model objects

+0

我想如果你的數據庫中存在關聯,那麼就不需要在代碼中提供明確的關聯。此外,奇怪的是當我返回this.ObjectContext.Questions.Include(「答案」),即在查詢中沒有linq我確實在客戶端的問題實體中的Answers實體。任何想法發生了什麼? – Sumit 2012-01-28 05:14:46

+0

你是從數據庫協會正確的。 – 2012-01-30 17:27:40