我需要创建一个包含 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 将任何新列添加到作为属性添加的索引中到映射文件。