Один-ко-многим без обратной ссылки в подчиненном объекте - PullRequest
4 голосов
/ 27 мая 2011

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

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

Но у моего подкласса Comment нет свойства типа 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 не имеет ссылки на его Post, следовательно, мне не нужно ничего определять для второго параметра в верхнем коде. Если я предоставлю string.Empty или null, я получу исключение, если недопустимый параметр метода.

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

1 Ответ

2 голосов
/ 31 мая 2011

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

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

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

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