Cách tạo Chỉ mục nhiều cột và/hoặc Ràng buộc duy nhất bằng cách sử dụng Ánh xạ NHibernate hoặc NHibernate thông thạo.Cách tạo Chỉ mục nhiều cột hoặc Ràng buộc duy nhất với NHibernate
Trả lời
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!
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ínhunique-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".
- 1. Ràng buộc duy nhất qua nhiều cột
- 2. Ràng buộc duy nhất trên nhiều cột
- 3. Ràng buộc bảng SQLite - duy nhất trên nhiều cột
- 4. JPA - xác định các ràng buộc duy nhất nhiều cột
- 5. Có thể tạo một ràng buộc duy nhất (chỉ mục) trên nhiều bảng không?
- 6. ràng buộc duy nhất có điều kiện
- 7. Ràng buộc duy nhất của Oracle và chỉ mục duy nhất
- 8. Việc tạo một ràng buộc duy nhất trên một cột có tự động tạo chỉ mục không?
- 9. MySQL: Ràng buộc duy nhất trên nhiều trường
- 10. SQL Server 2005 Ràng buộc duy nhất trên hai cột
- 11. Làm cách nào để chỉ định một chỉ mục nhiều cột với Fluent NHibernate
- 12. Buộc ràng buộc duy nhất trong GAE
- 13. Giảm ràng buộc duy nhất cho cột trong H2
- 14. Tìm xem cột có ràng buộc duy nhất
- 15. Cột Ràng buộc duy nhất chỉ có thể chứa một giá trị NULL
- 16. Ràng buộc duy nhất với EFCodeFirst và SqlCe4
- 17. Làm cách nào để tạo một ràng buộc duy nhất của SQL dựa trên 2 cột?
- 18. Chỉ mục duy nhất hoặc khóa duy nhất?
- 19. Ràng buộc duy nhất có điều kiện trong oracle db
- 20. SQL: Ràng buộc duy nhất khi cột là một giá trị nhất định
- 21. Các ràng buộc duy nhất trong couchdb
- 22. Ràng buộc duy nhất với chú thích dữ liệu
- 23. Ràng buộc duy nhất với giá trị được xác định
- 24. Alembic: Cách thêm ràng buộc duy nhất vào cột hiện tại
- 25. Postgres Ràng buộc duy nhất trên hai cột: Số nguyên và Boolean
- 26. Phím duy nhất so với chỉ mục duy nhất trên SQL Server 2008
- 27. R- Tạo một ngày duy nhất từ nhiều cột
- 28. kiểm tra ràng buộc duy nhất trong JPA
- 29. Tại sao MySQL Innodb "Tạo chỉ mục sắp xếp" khi chỉ mục duy nhất tồn tại?
- 30. Sự khác biệt giữa Khóa duy nhất và chỉ mục với IsUnique = Có?
Đố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"); –
Đố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
Đ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