2

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 句のユーザー テーブル部分に、zipcode と他のすべての列に 1 つの列のインデックスが必要です。マッピング ファイルまたはその他の方法を使用して、このタイプのインデックスを作成する方法はありますか?

これはおそらくロングショットですが、すべての列を指定する必要はなく、クエリの INCLUDE 部分でインデックス付きの列を指定する必要はありません...代わりに、プロパティとして追加されるインデックスに新しい列を nhibernate に追加させるだけですマッピングファイルに。

4

1 に答える 1

1

したがって、問題の一部は、database-object主に不十分なドキュメントが原因で、実際にタグを理解していないことでした。私が集めたものから、<create>とタグは次のよう<drop>に使用する場合にのみ使用されます。SchemaExport

    Dim schemaExport As SchemaExport = New SchemaExport(NhibernateConfiguration)
    schemaExport.Execute(False, True, False)

私のアプリは、そのクラスを使用してスキーマを作成しません。代わりにSchemaUpdate、スキーマが毎回吹き飛ばされないように使用します (データベースはユーザーのマシンに既に存在している可能性があります)。

    Dim schemaUpdate As SchemaUpdate = New SchemaUpdate(NhibernateConfiguration)
    schemaUpdate.Execute(False, True)

それが問題でした。次の論理的な質問は、 を使用して SQL を実行する方法ですSchemaUpdate。答えは...できません。この投稿を参照してください: https://forum.hibernate.org/viewtopic.php?f=6&t=969584&view=next

悲しいかな、生のSQLを使用する必要があります。いつか<update>タグが追加されるかもしれません。

于 2012-11-26T20:19:02.870 に答える