代码之家  ›  专栏  ›  技术社区  ›  Nathan Fisher

NHibernate中视图的映射策略

  •  8
  • Nathan Fisher  · 技术社区  · 16 年前

    似乎NHibernate需要有一个id标记作为映射的一部分。这给视图带来了一个问题,因为大多数时候(根据我的经验)视图都没有Id。我以前在nhibernate中映射过视图,但它们的映射方式对我来说似乎很混乱。

    这是一个 我现在如何做的例子。

    映射

      <class name="ProductView" table="viewProduct" mutable="false" >
        <id name="Id" type="Guid" >
          <generator class="guid.comb" />
        </id>
        <property name="Name" />
    <!-- more properties -->
      </class>
    

    Select NewID() as Id, ProductName as Name, --More columns
    From Product  
    

    等级

    public class ProductView
    {
        public virtual Id {get; set;}
        public virtual Name {get; set;}
    }
    

    我不需要产品的Id,或者在某些视图的情况下,我可能没有视图的Id,这取决于我是否可以控制视图

    在nhibernate中有没有更好的方法将视图映射到对象?


    目前为止的答案

    映射

      <class name="ProductView" table="viewProduct" mutable="false" >
        <id name="Id" type="Guid" />
        <property name="Name" />
        <!-- more properties -->
      </class>
    

    等级

     public class ProductView
        {
            public virtual Name {get; set;}
            //more properties
        }
    

    查看SQL
    我还需要NewID()吗?

    选择NewID()作为Id,选择ProductName作为名称,--更多列
    来自产品
    
    2 回复  |  直到 13 年前
        1
  •  5
  •   Diego Mijelshon    16 年前

    通过不将Id映射到属性并省略生成器,可以使其更简洁:

    <id column="Id" type="guid"/>
    

    这样,您就可以将问题保留在数据层中,而不会将实现细节泄漏到您的域中。

        2
  •  2
  •   Ben Hoffstein    16 年前

    composite-id 定义,因为它是唯一标识给定记录的机制。如果没有为视图中的每一行提供键的列组合,那么我认为您将不得不使用一些黑客的解决方法。

    推荐文章