У меня проблема с отображением того, что, по моему мнению, является довольно простой ассоциацией.NHibernate от одного до многих с дискриминатором
Вот пример модели домена я пытаюсь к карте:
public class MyClass
{
IDictionary<string, DateTime> Dates { get; set; }
}
public class MyOtherClass
{
IDictionary<string, DateTime> Dates { get; set; }
}
Я хотел бы свойство Даты должны отображаться в одну таблицу, что-то вроде этого:
TABLE Dates
COLUMNS
ParentId (Parent class key value)
ParentType (Parent class type)
DateType (Index value for dictionary)
DateValue
SAMPLE
ParentId ParentType DateType DateValue
----------------------------------------------------------
1 MyClass TYPEA 2009-10-09
1 MyOtherClass TYPEA 2009-11-08
Я открыт для предложений о том, как лучше моделировать это, но в основном я хочу, чтобы одна из многих ассоциаций не засоряла базу данных отдельной таблицей для каждой коллекции.
Я использую DateTime в этом конкретном примере, так как это то, что я пытаюсь сделать прямо сейчас, но так же легко может быть любой тип, даже другой пользовательский класс, который я хотел бы моделировать таким же образом.
Любая идея относительно того, как это должно отображаться?
Я считаю, что это похоже на вопрос, который я задал ранее (NHibernate: How do I map mutiple parents' children of a common type into a single table?), но это решение оказалось в кросс-таблицах по всему месту, что на самом деле не является результатом, которого я пытаюсь достичь.
Что было не так с моделью наследования? Использование суперкласса MyClassBase с IDictionary Dates {get; set;} Это было упомянуто в другом вопросе? Это позволит вам повторно использовать одну и ту же таблицу и использовать столбец дискриминатора –
Проблема, которую я вижу с моделью наследования, заключается в том, что у меня нет общего базового класса. Лучший случай, который я могу придумать, - создать интерфейс с свойством IDictionary Dates, но тогда у меня есть случай реализовать и сопоставить несколько интерфейсов, так как моя реальная модель имеет несколько коллекций разных такие типы, которые должны отображаться. Кажется, это очень быстро становится очень сложным. –