Có thể tạo chỉ mục bảng cùng với phần còn lại của lược đồ cơ sở dữ liệu với Fluent NHibernate không? Tôi muốn có thể tạo DDL cơ sở dữ liệu hoàn chỉnh thông qua một quá trình xây dựng tự động.Tạo chỉ mục bảng bằng cách sử dụng Fluent NHibernate
Trả lời
Trong nhiều phiên bản gần đây của thành thạo NHibernate, bạn có thể gọi phương thức Index()
để làm điều này thay vì sử dụng SetAttribute
(mà không còn tồn tại):
Map(x => x.Prop1).Index("idx__Prop1");
Bạn có nghĩa là chỉ mục trên cột không?
Bạn có thể thực hiện thủ công trong các tệp ClassMap<...>
của mình bằng cách thêm .SetAttribute("index", "nameOfMyIndex")
, ví dụ: như vậy:
Map(c => c.FirstName).SetAttribute("index", "idx__firstname");
hoặc bạn có thể làm điều đó bằng cách sử dụng các tính năng thuộc tính của trình tự động - ví dụ: như vậy:
Sau khi tạo mô hình kiên trì của bạn:
{
var model = new AutoPersistenceModel
{
(...)
}
model.Conventions.ForAttribute<IndexedAttribute>(ApplyIndex);
}
void ApplyIndex(IndexedAttribute attr, IProperty info)
{
info.SetAttribute("index", "idx__" + info.Property.Name");
}
và sau đó làm điều này để tổ chức của bạn:
[Indexed]
public virtual string FirstName { get; set; }
Tôi thích sau này. Có phải là một sự thỏa hiệp tốt giữa việc không phải là không có ích cho mô hình miền của bạn, nhưng vẫn rất hiệu quả và rõ ràng về những gì đang xảy ra.
Đó chính xác là những gì tôi đang tìm kiếm. Cảm ơn bạn. –
Câu trả lời của Mookid thật tuyệt vời và đã giúp tôi rất nhiều, nhưng trong khi đó, API Fluent NHibernate đã phát triển đã thay đổi.
Vì vậy, đúng cách để viết mẫu mookid tại là như sau:
//...
model.ConventionDiscovery.Setup(s =>
{
s.Add<IndexedPropertyConvention>();
//other conventions to add...
});
nơi IndexedPropertyConvention như sau:
public class IndexedPropertyConvention : AttributePropertyConvention<IndexedAttribute>
{
protected override void Apply(IndexedAttribute attribute, IProperty target)
{
target.SetAttribute("index", "idx__" + target.Property.Name);
}
}
Các [Indexed] thuộc tính hoạt động theo cách tương tự bây giờ.
- 1. Fluent nHibernate, bảng Hi-Lo với thực thể mỗi hàng bằng cách sử dụng quy ước
- 2. Làm cách nào để chỉ định một chỉ mục nhiều cột với Fluent NHibernate
- 3. Nhiều cấp độ thừa kế với Fluent NHibernate bằng cách sử dụng phân biệt đối xử
- 4. Tạo cơ sở dữ liệu với Nhibernate sử dụng Fluent NHibernate
- 5. Tìm chỉ mục hàng bảng bằng cách sử dụng jQuery
- 6. Nibernate/Fluent NHibernate: Sử dụng Bộ lọc với SubclassMap
- 7. Fluent Nhibernate left tham gia
- 8. Cách biết truy vấn được tạo bởi Fluent NHibernate
- 9. Lập bản đồ một thuộc tính chỉ đọc mà không cần thiết lập bằng cách sử dụng Fluent NHibernate
- 10. Xác minh ánh xạ nhibernate fluent nhibernate
- 11. Sử dụng Fluent NHibernate trong ứng dụng thương mại
- 12. Fluent NHibernate Visual Designer
- 13. Ánh xạ DayOfWeek từ không gian tên System bằng cách sử dụng Fluent Nhibernate
- 14. NHibernate: Sử dụng Fluent Nhibernate để lưu các đối tượng con
- 15. Fluent NHibernate, join-subclass mapping
- 16. Ánh xạ bảng Fluent-NHibernate không có khóa chính
- 17. Fluent NHibernate LazyLoad Issues
- 18. Làm thế nào để chỉ định tên bảng trong lớp ClassMap Fluent NHibernate?
- 19. one-to-one fluent nhibernate?
- 20. Fluent NHibernate HasManyToMany() Lập bản đồ
- 21. Làm cách nào để sử dụng Fluent NHibernate với .NET 4.0?
- 22. Tạo bảng bằng cách sử dụng Javascript
- 23. Sử dụng Fluent-NHibernate với các bảng trong các lược đồ cơ sở dữ liệu khác nhau
- 24. Fluent NHibernate, làm việc với giao diện
- 25. Fluent NHibernate FluentMappings.AddFromAssemblyOf <> Phát hành
- 26. Thứ tự NHibernate bằng cách sử dụng CASE
- 27. fluent nhibernate HasOne WithForeignKey không hoạt động
- 28. Fluent nHibernate Join đang thực hiện chèn vào bảng đã nối
- 29. NHibernate fluent HasMany ánh xạ chèn NULL Phím ngoài
- 30. Lập chỉ mục bảng đa chiều sử dụng vector cột
Đúng, API đã thay đổi và đây được coi là cách chính xác để đặt chỉ mục. Tôi đã cập nhật câu trả lời cho câu hỏi này để phản ánh thay đổi này. Cảm ơn bạn. –