2009-05-07 35 views

Trả lời

14

gán một chỉ số/độc đáo tên hạn chế để hơn sau đó một tài sản

<property name="A" index="AB" /> 
<property name="B" index="AB" /> 

lý thuyết nó cũng sẽ làm việc với có nhiều sau đó một chỉ mục trên cùng đối tượng:

<property name="A" index="AB, ABC" /> 
<property name="B" index="AB, ABC" /> 
<property name="C" index="ABC" /> 

But there is a bug. Tôi cũng đã viết một bản vá. nếu bạn quan tâm đến điều này, xin vui lòng bỏ phiếu cho các lỗi hoặc thêm bình luận hoặc một cái gì đó.

Chỉnh sửa: chỉ cần kiểm tra những gì đã xảy ra với the bug. Nó được sửa trong phiên bản 2.1.0, vì vậy nó hoàn toàn hoạt động ngay bây giờ. Rất cám ơn đội ngũ phát triển NHibernate tuyệt vời!

+3

Đối với chế độ NHibernate thông thạo, bạn phải sử dụng SetAttribute, làm cho nó giống như sau: Bản đồ (x => x.A) .SetAttribute ("index", "AB"); –

+1

Đối với bất cứ ai tự hỏi, Fluent NHibernate hiện hỗ trợ '.Index (" IndexName ... ")', thay vì phải sử dụng 'SetAttribute'. – Phill

+0

Điều quan trọng là phải nói rằng thuộc tính 'chỉ mục' (và 'duy nhất khóa' quá) được sử dụng bởi NHibernate chỉ khi nó tạo ra một câu lệnh CREATE TABLE và không ngăn NHibernate cố gắng chèn hàng trùng lặp khi sử dụng phiên. Lưu, v.v. – mayu

14

Cũ, nhưng tôi có một cái gì đó để thêm kể từ khi tôi tình cờ gặp cùng vấn đề này:

Stefan Steinegger đã trả lời một cách chính xác cho chỉ số đa cột không -unique, nhưng bỏ qua các mã cho độc đáo nhiều cột chỉ mục. Đối với những người bạn có thể sử dụng:

<property name="A" unique-key="AB" /> 
<property name="B" unique-key="AB" /> 

Vì vậy, về cơ bản giống nhau nhưng với tên thuộc tính khác.


Một điều thú vị cần lưu ý là chỉ số cho độc đáo, NHibernate tạo tên riêng của mình để chìa khóa, nhưng đối với chỉ số không duy nhất nó sử dụng bất cứ điều gì bạn cho nó.

Ví dụ: mã ở trên sẽ KHÔNG tạo chỉ mục duy nhất có tên "AB", mà thay vào đó là một cái gì đó như UQ__TableName__7944C87104A02EF4.

này được ghi chép lại trong section 19.1.1 của tài liệu NHibernate:

Một số thẻ chấp nhận một thuộc tính index để xác định tên của một chỉ số cho cột đó. Có thể sử dụng thuộc tính unique-key để nhóm các cột trong một ràng buộc khóa đơn vị duy nhất. Hiện tại, giá trị được chỉ định của thuộc tính khóa duy nhất là không được sử dụng để đặt tên cho ràng buộc, chỉ để nhóm các cột trong tệp ánh xạ.

Tuy nhiên sau:

<property name="A" index="AB" /> 
<property name="B" index="AB" /> 

sẽ chỉ tạo ra một chỉ số có tên là "AB".

Các vấn đề liên quan