Один ко многим без обратной ссылки в подсвязанном объекте

#entity-relationship #multiple-resultsets #bltoolkit

#сущность-отношение #множественные наборы результатов #bltoolkit

Вопрос:

Если у меня есть отношение «один ко многим» между двумя объектами (т. Е.. Post и Comment ) и мой мастер-класс определен как:

 public class Post {
    ...
    IList<Comment> Comments { get; set; }
}
  

Но мой Comment подсвязанный класс не имеет свойства type Post , потому что никогда не нужно переходить от комментария к сообщению. Комментарии всегда отображаются вместе с экземпляром основной записи.

Затем у меня есть хранимая процедура, которая возвращает два результирующих набора: записи и комментарии, которые связаны с ними. Я определяю мой MapResultSet как

 MapResultSet[] sets = new MapResultSet[2];

sets[0] = new MapResultSet(typeof(Post), posts);
sets[1] = new MapResultSet(typeof(Comment));

sets[0].AddRelation(sets[1], /* what goes here? */, "PostID", "Comments");
  

Но это не работает, поскольку Comment у него нет ссылки на its Post , следовательно, мне нечего определять для второго параметра в верхнем коде. Если я предоставляю string.Empty или null , я получаю исключение, если параметр метода неверен.

Как я должен определить взаимосвязь между этими двумя объектами без добавления Post свойства к Comment ?

Ответ №1:

Комментарий должен иметь «postID», если этого не происходит, невозможно определить запись для комментария (например, в результирующих наборах у нас есть 2 записи и 7 комментариев)

Таким образом, вы должны добавить либо свойство Post, либо postID к классу Comment.

Также для простых случаев, пожалуйста, ознакомьтесь с атрибутом RelationAttribute, пример здесь См. Test2(), это помогает избежать подготовки отношений вручную, нет необходимости писать:

 sets[0].AddRelation(sets[1], "PostID", "PostID", "Comments");
  

Комментарии:

1. На самом деле вы правы. Мой код возвращал одно сообщение с комментариями. Но множественный результирующий набор не может знать об этом. Итак, я полагаю, что ваш ответ должен быть принят. 🙂