本节内容
概览
这个系列是以博客形式整理关于NHibernate的Issues。记录一些零碎的小例子,通过零零碎碎的整理,可以巩固自己的知识和扩展我们的知识面。这些小例子也可以适当的在项目中呈现。
这次看看ISession.GetNamedQuery()方法。
实例
这个小例子在我们替换更新类中属性值的时候非常有用,直接使用ExecuteUpdate()针对其某个对象更新,效率上也好很多。
1.Domain
- public 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>
- <<b>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></b>
复制代码 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())
- {
- <b>session.GetNamedQuery("replaceQuery")
- .SetString("old", "oldValue")
- .SetString("new", "newValue").ExecuteUpdate();</b>
- 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
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |