2

INCLUDE 열을 가진 비 클러스터형 인덱스를 생성해야합니다 (아래 <create> 태그 참조). 다음은 매핑 파일입니다.nhibernate 매핑 파일을 사용하여 "Include"열이 포함 된 커버 색인을 만듭니다.

<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와 관련이 있기 때문에 dialect-scope가있는 이유입니다. 단일 및 다중 열 인덱스를 만드는 방법을 알고 있지만 이것이 내가 원하는 것은 아닙니다. 쿼리의 INCLUDE 절의 User 테이블 부분에 zipcode 및 다른 모든 열에 단일 열 인덱스를 지정합니다. 매핑 파일 또는 다른 방법을 사용하여 이러한 유형의 인덱스를 만들 수있는 방법이 있습니까?

이것은 아마도 길지만, 쿼리의 INCLUDE 부분에있는 모든 열을 지정하지 않아도 좋을 것 같습니다 ... 대신 nhibernate가 인덱스에 새로운 열을 추가하도록합니다. 맵핑 파일에 특성으로 추가됩니다.

답변

1

그래서 문제의 일부는 참으로 가난한 문서 때문에 대부분 database-object 태그를 이해하지 못했습니다. 내가 수집 한 것과 같이 SchemaExport를 사용하는 경우, <create><drop> 태그에만 사용됩니다에서 :

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

내 애플 클래스를 사용하여 스키마를 작성하지 않습니다. 대신이 SchemaUpdate 그래서 스키마마다 (데이터베이스가 이미 사용자 컴퓨터에 존재할 수)를 날아되지 않은 사용 문제가 있었다

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

합니다. 묻는 다음 논리적 인 질문은 SchemaUpdate을 사용하여 SQL을 어떻게 실행하는지입니다. 대답은 ... 할 수 없습니다. 이 게시물을 참조하십시오 : https://forum.hibernate.org/viewtopic.php?f=6&t=969584&view=next

아아 나는 원시 SQL을 사용하도록 남았습니다. 어쩌면 언젠가는 <update> 태그를 추가 할 것입니다.