2010-03-05 2 views
4

Если у вас есть набор таблиц в базе данных, которые строго состоят из описания строки и идентификатора, какой способ загрузить их через NHibernate?Использование NHibernate с поисковыми таблицами

Так что предположим, что у меня есть класс сэндвич, а в бутерброде есть мясо, сыр и овощ, где эти три вещи - таблицы поиска в БД. Это, как представляется, наиболее совместимыми с NHibernate философии иметь

public class Meat { string name; int id; } 
public class Cheese { string name; int id; } 
public class Vegetable { string name; int id; } 
public class Sandwich { Meat meat; Cheese cheese; Vegetable vegetable; } 

Но с несколькими десятками столов, как это в базе данных, классы, кажется, размножаются быстро. Предположим, что я настроил это следующим образом:

public class NameAndID { string name; int id; } 
public class Sandwich { NameAndID meat; NameAndID cheese; NameAndID vegetable; } 

Возможно ли это? Как это будет реализовано в Fluent NHibernate?

ответ

1

Для определения типа вам понадобится другой столбец. Вы можете использовать перечисление для этого. Тогда все ваши поиски должны включать в себя это ограничение ....

CreateCriteria<NameAndID>.Add(Restrictions.Eq("ntype", E.Meat) 

Однако я предпочел бы отдельные таблицы, так что вы можете иметь лучшие внешние ключи. В противном случае в ограничениях базы данных нет ничего, что помешало бы вам сделать сэндвич, который представляет собой просто 3 куска сыра.

+0

Я действительно думал о сохранении отдельных таблиц и о том, чтобы все они сопоставлялись с NameAndID. Это возможно? –

+0

Вид ... просто добавьте пустые определения классов, которые наследуются от NameAndID. Вам все равно нужно будет сопоставить каждого из них. – dotjoe

Смежные вопросы