代码之家  ›  专栏  ›  技术社区  ›  user366312

NHibernate、Pivot Table和/或GetNextID()

  •  0
  • user366312  · 技术社区  · 15 年前

    我可以用NHibernate的透视表吗?

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

    1 回复  |  直到 15 年前
        1
  •  4
  •   Community CDub    8 年前

    自动增量ID
    NHibernate支持的所有数据库都有自动增量ID生成器。见 generator 在参考文件中。

    要使用自动递增ID属性,请按如下方式映射它,并在创建新实体时将ID值保留为默认值(0)。

    <id name="Id" >
        <generator class="native"/>
    </id>
    

    您甚至可以通过实现 NHibernate.Id.IIdentifierGenerator .不过,看看这个 question 关于为什么应该使用数据库本机自动增量机制的讨论。

    基准表
    NHibernate对数据透视表没有特定的支持。也就是说,可以使用结果转换器将任何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" .

    结果变压器

    可提供多种结果转换器,包括:

    • 变压器。 托利斯特 返回A list 每行的值。
    • 变压器。 别名实体映射 创建一个 map 从列名到每行的值。
    • 变压器。 别名bean() 每行创建指定类型的对象,并使用同名列中的值设置其属性。