Я пытаюсь построить объект, содержащий несколько списков. Объект - сообщение - представлен одной таблицей, а содержащиеся списки представлены одной таблицей каждая.
Проблема в том, что при выборе сообщений свойства, которые должны ссылаться на содержимое дочерних таблиц, имеют нулевое число, даже если в дочерних таблицах есть значения.
Я упростил базу данных, чтобы у меня была только одна связанная дочерняя таблица, чтобы предоставить хороший пример проблемы.
Что у меня есть:
Одна таблица с именем Messages содержит следующие свойства:
- Id - uint - автоматически сгенерирован - первичный ключ
- Сообщение - строка
Одна таблица называется Получатели, которая содержит следующие свойства:
- MessageId - uint - первичный ключ
- RecipientId - uint - первичный ключ
Одна связь между этими двумя. Сообщения родительские, получатели дочерние. Кардинальность один ко многим. Участвующие свойства: Messages.Id -> Recipients.MessageId.
Моя цель - сохранять сообщения. Каждое сообщение должно иметь одного или нескольких получателей. Когда я извлекаю сообщение из таблицы Messages, я хочу, чтобы свойство Recipients (созданное из ассоциации с таблицей Recipients) возвращало мне всех получателей, у которых MessageId равен Id извлеченного сообщения.
Итак, я вставляю в базу данных:
void SendMessage(string message, uint recipient)
{
var m = new Message { Message = message };
context.Messages.InsertOnSubmit(m);
context.SubmitChanges();
var r = new Recipient { MessageId = m.Id, RecipientId = recipient };
context.Recipients.InsertOnSubmit(r);
context.SubmitChanges();
}
Теперь, если я выберу сообщения из таблицы сообщений, я найду сообщение. Его свойство Recipients имеет значение Count = 0. Каким-то образом связь с получателями не создается. Поэтому я должен сделать что-то не так.
Однако - и это действительно смущает меня - если я выбираю получателей из таблицы получателей, я нахожу получателя с правильными MessageId и RecipientId. Платформа ORM также сгенерировала свойство, которое ссылается на родительскую таблицу, и это работает! Свойство Message объекта Recipient фактически ссылается на Message, являющееся его родителем.
Может ли кто-нибудь дать мне подсказку о том, что мне не хватает, чтобы иметь возможность перечислить все дочерние сущности родительской сущности? Или о том, что еще нужно дать мне ответ?