NHibernate中映射视图的策略

Nat*_*her 8 nhibernate views nhibernate-mapping

似乎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>
Run Code Online (Sandbox Code Playgroud)

查看SQL

Select NewID() as Id, ProductName as Name, --More columns
From Product  
Run Code Online (Sandbox Code Playgroud)

public class ProductView
{
    public virtual Id {get; set;}
    public virtual Name {get; set;}
}
Run Code Online (Sandbox Code Playgroud)

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

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

编辑
答案到目前为止

制图

  <class name="ProductView" table="viewProduct" mutable="false" >
    <id name="Id" type="Guid" />
    <property name="Name" />
    <!-- more properties -->
  </class>
Run Code Online (Sandbox Code Playgroud)

 public class ProductView
    {
        public virtual Name {get; set;}
        //more properties
    }
Run Code Online (Sandbox Code Playgroud)

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

Select NewID() as Id, ProductName as Name, --More columns
From Product  
Run Code Online (Sandbox Code Playgroud)

Die*_*hon 5

你可以通过不将Id映射到属性并省略生成器来使它更清洁:

<id column="Id" type="guid"/>
Run Code Online (Sandbox Code Playgroud)

这样,您就可以将问题保留在数据层中,而不会将实施细节泄露给您的域.

  • 不,这意味着您的班级不需要Id属性. (2认同)