我可以将透视表与NHibernate一起使用吗?
我能写吗?
ID id = new Transaction().GetNextID("[TableName]", "[IDColumnName]")
- 类似于使用NHibernate增加ID的代码?
答案 0 :(得分:4)
自动递增ID
NHibernate支持的所有数据库都有自动增量id生成器。请参阅参考文档中的generator。
要使用自动增量Id属性,请将其映射如下,并在创建新实体时将Id值保留为默认值(0)。
<id name="Id" >
<generator class="native"/>
</id>
您甚至可以通过实施NHibernate.Id.IIdentifierGenerator
来推广自己的发电机。但是,请参阅此question以了解有关使用数据库本机自动增量机制的原因的讨论。
数据透视表
NHibernate没有对Pivot表的特定支持。也就是说,您可以使用结果转换器将任何SQL查询的结果映射到对象。不需要映射目标对象,列必须与属性匹配。
Named SQL个查询。您也可以直接使用native SQL个查询。两种类型的查询都支持命名和位置参数。
var list = session.GetNamedQuery("query-name")
.SetResultTransformer( Transformers.AliasToBean<Foo>())
.SetString("name", "foo")
.List<Foo>();
var list = session.CreateSQLQuery("SELECT * FROM table WHERE A=? and B=?")
.SetString(0, "foo")
.SetInt(1, 42)
.SetResultTransformer( Transformers.AliasToBean<Foo>())
.List<Foo>();
如果您为透视查询定义了视图,则可以使用mutable="false"
为其定义只读映射的类。
结果变形金刚
可以使用许多结果变换器,包括: