2009-03-03 38 views

Trả lời

44

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"); 
+0

Đú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. –

15

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.

+0

Đó chính xác là những gì tôi đang tìm kiếm. Cảm ơn bạn. –

10

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ờ.

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