我有一张包含许多客户信息的表
ID | employeename | customerId
------------------------------
1 | employee1 | 188
2 | employee2 | 188
3 | employee3 | 177
现在我想只获得那些customerId为188的员工。如何使用Fluent NHibernate进行映射,那么在更新和删除时,还会有WHERE customerId = 188
?
当前映射类似于:
Id(x => x.Id);
Map(x => x.Name).Column("employeename");
Map(x => x.CustomerId).Column("customerId");
仅添加Where("customerId = 188")
会导致SELECT中的custom where子句。我需要在saveorupdate上执行UPDATE子句。
UPDATE employees SET employeename="employ" WHERE ID = 2 AND customerId = 188;
答案 0 :(得分:0)
你错误地想到了这个SQL思想。
1)添加HasMany(x => x.Employees).Inverse()。AsSet();在您的客户类中 2)添加引用(x => x.Customer);在您的员工类中。
这称为双向映射。
请看这里:http://www.progware.org/Blog/post/NHibernate-inverse3dtrue-and-cascade3dsave-update-demo.aspx
您的想法是创建对象并为其指定值。之后,如果您有适当的映射文件,NHibernate将执行SQL语句。不要写你的SQL查询,然后强制NHibernate生成完全相同的。而是编写映射并查看NHibernate生成的SQL并尝试对其进行优化。
PS:别忘了添加级联......