本节内容 概览 实例 参考资料 概览 这个系列是以博客形式整理关于NHibernate的Issues。记录一些零碎的小例子,通过零零碎碎的整理,可以巩固自己的知识和扩展我们的知识面。这些小例
本节内容
- 概览
- 实例
- 参考资料
这个系列是以博客形式整理关于NHibernate的Issues。记录一些零碎的小例子,通过零零碎碎的整理,可以巩固自己的知识和扩展我们的知识面。这些小例子也可以适当的在项目中呈现。
这次看看ISession.GetNamedQuery()方法。
实例这个小例子在我们替换更新类中属性值的时候非常有用,直接使用ExecuteUpdate()针对其某个对象更新,效率上也好很多。
1.Domainpublic class DomainClass { public virtual int Id { get; set; } public virtual string Data { get; set; } }2.Mapping
<class name="DomainClass"> <id name="Id"> <generator class="assigned" /> </id> <property name="Data" /> </class> <query name="replaceQuery"> <query-param name="old" type="String"/> <query-param name="new" type="String"/> <![CDATA[ update DomainClass set Data = replace(Data,:old, :new) ]]> </query>3.Test
//1.保存一个Domain using (var session = OpenSession()) { using (var tx = session.BeginTransaction()) { var entity = new DomainClass { Id = 1, Data = "some oldValue data" }; session.Save(entity); tx.Commit(); } } using (var session = OpenSession()) { //使用命名查询更新Domain的Data属性 using (var tx = session.BeginTransaction()) { session.GetNamedQuery("replaceQuery") .SetString("old", "oldValue") .SetString("new", "newValue").ExecuteUpdate(); tx.Commit(); } //验证Domain的Data属性 using (var tx = session.BeginTransaction()) { var entity = session.Get<DomainClass>(1); Assert.AreEqual("some newValue data", entity.Data); tx.Commit(); } }4.结果
INSERT INTO DomainClass (Data, Id) VALUES ('some oldValue data', '1'); update DomainClass set Data=replace(Data,'oldValue','newValue'); SELECT domainclas0_.Id as Id0_0_, domainclas0_.Data as Data0_0_ FROM DomainClass domainclas0_ WHERE domainclas0_.Id='1';参考资料
Dario Quintana:Why use named queries with NHibernate