NHibernate SchemaExport没有创建索引

时间:2012-10-23 10:37:35

标签: .net nhibernate schemaexport

我的NHibernate映射包含一个<database-object>元素来定义MS SQL Server 2008的索引。问题是当我调用SchemaExport.Create时,这个SQL不会包含在模式中。其他所有内容都已创建,但没有索引。

其中一个实体看起来像这样,例如:

<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">

  <class xmlns="urn:nhibernate-mapping-2.2" 
      name="MyApp.Entities.SomeEntity, MyApp.Entities" table="SomeEntity">

    <!- -->

  </class>

  <database-object>
    <create>
      CREATE INDEX [Idx_SomeEntityIndex] ON [SomeEntity] 
          ([Field1] ASC, [Field2] ASC) INCLUDE ( [Field3], [Field4], [Field5])
      CREATE STATISTICS [Stat_SomeEntityStat] ON [SomeEntity] 
          ([Field1], [Field2])
    </create>
    <drop>
      DROP INDEX [Idx_SomeEntityIndex] ON [SomeEntity]
      DROP STATISTICS [Stat_SomeEntityStat]
    </drop>
    <dialect-scope name="NHibernate.Dialect.MsSql2008Dialect, NHibernate"/>
  </database-object>

</hibernate-mapping>

问题是之前曾经工作过(可能在从NH2转移到NH3之前),我不确定NHibernate中是否有任何改变会阻止它执行。

Dialect在配置文件中匹配我的方言。

1 个答案:

答案 0 :(得分:0)

感谢@OskarBerggren,我在另一个论坛得到了答案。问题是不应在方言字符串中指定程序集名称(在本例中为NHibernate)。

所以,当我改变这个时:

<dialect-scope name="NHibernate.Dialect.MsSql2008Dialect, NHibernate"/>

到此:

<dialect-scope name="NHibernate.Dialect.MsSql2008Dialect"/>

它解决了我的问题。