NHibernate: как выбрать родителя с одним ребенком (зная childID)? - PullRequest
0 голосов
/ 07 ноября 2011
  1. Я хочу добавить ребенка к родителю.В какой момент мне известно новое удостоверение личности ребенка?Могу ли я получить доступ к нему до вставки БД?Мой генератор идентификаторов - HILO.Причина, по которой я спрашиваю, заключается в том, что копию родительского объекта необходимо распространить в другое приложение.Знание этого потенциально спасло бы меня от поездки в БД только для того, чтобы узнать, каков идентификатор недавно вставленного Ребенка, так как у меня есть вся другая информация, уже имеющаяся у меня.

  2. Если 1) можетне может быть выполнено без обратной передачи в БД, тогда (после вставки), как я могу выбрать родителя только с ребенком?У родителя может быть несколько детей, но меня интересует только родитель с таким ребенком.Это не совсем работает для меня:

    parent = session.QueryOver () .List () .Where (p => p.Children.Select (c => c.Id == ChildId) .First ()). First ();

SQL-эквивалент, который я хочу:

select Parent.Id, Children.* From Parent
    join Children on Parent.Id = Children.ParentId
    where ChildId = 1540096

1 Ответ

1 голос
/ 07 ноября 2011

В Session.Save(YourObject) идентификатор будет заполнен для вашего объекта. Однако это не приведет к немедленной вставке в базу данных. Фактическая вставка будет происходить при очистке сеанса (Transaction.Commit и т. Д.).

Кроме этого, при вашем текущем подходе вы можете распространять идентификатор, который может не отображаться на существующий объект. Например, представьте, что вы передаете Id перед вставкой, а затем вставка завершается неудачей по любой причине. Как справиться с этим противоречивым состоянием? Остерегайтесь этого случая и подобных.

Мой совет вам не распространять информацию о состоянии, которое может быть недействительным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...