Свободный дискриминатор Nhibernate от связанной с ними таблицы
-
13-11-2019 - |
Вопрос
У меня есть следующие 3 таблицы с примерными значениями
Vehicles ( id = 1, type_id = 20 , ... )
Vehicle_Types ( vt_id = 20, class_id = 160, ... )
Vehicle_Classes ( vcls_id = 160, name = "Concrete1" )
.
У меня есть
public class Concrete1 : Vehicle
{
}
.
И я хочу, чтобы Nibernate увеличивать конкретную запись1 при загрузке автомобиля № 1 в
Vehicle /*Concrete1*/ v = session.load<Vehicle>(1);
Как я мог сделать это с Automathings?Заранее спасибо.
Я начинаю думать, что это невозможно, поэтому любой обходной путь будет оценен.Любая подсказка для версии XML (без свободности) также может иметь большую помощь.
Решение
ОК, во-первых, плохие новости.
- .
- Вы не можете иметь дискриминатор в отдельной таблице, период. Вы можете взломать это, используя оператор Select с присоединением в качестве источника
table
, но тогда ваша организация будет эффективно только для чтения. Или вы можете использовать представление, которое может работать, но делегирует больше работы в БД. - даже с правильным сопоставлением,
session.load<Vehicle>(1)
никогда не вернет полученный тип (за исключением того, что если вы отключите ленивую загрузку, что является плохой идеей, или если конкретный экземпляр уже загружен как таковой на сеансе). Вы можете получить конкретный экземпляр с
Другие советы
Я думаю, что этот пост на блоге nhibernate.info делает то, что вы хотите сделать.
http:// nibernate.info / blog / 2011/02/16 / get-load-polymorphism-in-nibernate-3.html
Если не может дать вам идею.
Не связан с StackOverflow