我需要创建一个包含 INCLUDE 列的非聚集索引(参见<create>下面的标签)。这是映射文件:
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" namespace="MyApp" assembly="MyApp">
  <class name="User" table="user" >
    <id name="Id" type="Guid" column="user_id">
      <generator class="guid.comb"/>
    </id>
    <property name="Name" column="name" not-null="true"  />
    <property name="Phone" column="phone" />
    <property name="Zipcode" column="zipcode" />
  </class>
  <database-object>
    <create>
      CREATE NONCLUSTERED INDEX [IX_user_zipcode_id]
      ON User (Zipcode)
      INCLUDE (Name, Phone)
    </create>
    <drop>
      DROP INDEX IX_user_zipcode_id
    </drop>
    <dialect-scope name="NHibernate.Dialect.MsSql2000Dialect"/>
    <dialect-scope name="NHibernate.Dialect.MsSql2005Dialect"/>
    <dialect-scope name="NHibernate.Dialect.MsSql2008Dialect"/>
  </database-object>
</hibernate-mapping>
我遇到的问题是根本没有创建索引。似乎什么都没有发生。这是我第一次使用<database-object>,所以我可能在这里做错了什么。
我猜 INCLUDE 是特定于 Sql Server 的,这就是方言范围存在的原因。我知道如何创建单列和多列索引,但这不是我想要的。我想要在查询的 INCLUDE 子句的用户表部分中的邮政编码和所有其他列上的单列索引。有没有办法使用映射文件或其他方式创建这种类型的索引?
这可能是一个很长的镜头,但最好不必指定每一列,而是在查询的 INCLUDE 部分中指定索引的列...而不是让 nhibernate 将任何新列添加到作为属性添加的索引中到映射文件。