Свободный NHibernate: пользовательское условие (предложение WHERE) при получении, обновлении и удалении - PullRequest
0 голосов
/ 02 августа 2010

У меня есть таблица, которая содержит информацию от многих клиентов

ID | employeename | customerId
------------------------------
 1 | employee1    |  188
 2 | employee2    |  188
 3 | employee3    |  177

Теперь я хотел бы получить только тех сотрудников, у которых customerId 188. Как мне сопоставить это с Fluent NHibernate так, чтобы при обновлениии delete также будет WHERE customerId = 188?

Текущее сопоставление выглядит примерно так:

Id(x => x.Id);
Map(x => x.Name).Column("employeename");
Map(x => x.CustomerId).Column("customerId");

Добавление Where("customerId = 188") приводит только к пользовательскому оператору where в предложении SELECT.Мне нужно, чтобы после saveorupdate было выполнено предложение UPDATE.

UPDATE employees SET employeename="employ" WHERE ID = 2 AND customerId = 188;

1 Ответ

0 голосов
/ 02 августа 2010

Вы ошибаетесь, думая об этом в уме SQL.

1) Добавьте HasMany (x => x.Employees) .Inverse (). AsSet ();в вашем классе Customer.
2) Добавить ссылки (x => x.Customer);в вашем классе Employee.

Это называется двунаправленным отображением.

Смотрите здесь: http://www.progware.org/Blog/post/NHibernate-inverse3dtrue-and-cascade3dsave-update-demo.aspx

Идея состоит в том, что вы создаете свои объекты и присваиваете им значения.После этого NHibernate выполняет операторы SQL, если у вас есть соответствующие файлы сопоставления.Не пишите свои sql запросы, а затем заставляйте NHibernate генерировать точно такие же.Вместо этого напишите свои сопоставления и посмотрите, что генерирует SQL NHibernate, и попытайтесь оптимизировать его.

PS: не забудьте добавить каскад ...

...