NHibernate,Pivot-table和/或GetNextID()

时间:2010-02-18 16:19:48

标签: nhibernate

我可以将透视表与NHibernate一起使用吗?

我能写吗? ID id = new Transaction().GetNextID("[TableName]", "[IDColumnName]") - 类似于使用NHibernate增加ID的代码?

1 个答案:

答案 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"为其定义只读映射的类。

结果变形金刚

可以使用许多结果变换器,包括:

  • 变形金刚。 ToList 为每行返回list个值。
  • 变形金刚。 AliasToEntityMap 从列名创建map到每行的值。
  • Transformers。 AliasToBean()每行创建一个指定类型的对象,并使用同名列中的值设置其属性。