Включить коллекцию дочерних объектов в доменную службу Silverlight - PullRequest
0 голосов
/ 27 января 2012

У меня есть класс службы домена, как показано ниже

[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;
        }

Насколько я знаю, если вы хотите включить дочернюю сущность взапрос службы домена, тогда у вас есть атрибут Set [Include] в файле метаданных для объекта и включите его в запрос с помощью .Include («ChildEntityCollectionName»).

Я выполнил оба из них, но по-прежнему не получаю коллекцию ChildEntity на стороне моего клиента.Чего мне не хватает ??

1 Ответ

1 голос
/ 27 января 2012

Вы почти у цели. Вам нужно добавить атрибут ассоциации, чтобы помочь WCF RIA понять, как Question и Answer связаны.

[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: вставка нескольких объектов модели презентации

...