NHibernate拾贝1898:命名查询
本节内容[*]概览
[*]实例
[*]参考资料
概览
这个系列是以博客形式整理关于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
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
页:
[1]