2009-06-06 30 views
20

Có vẻ như tôi không thể tìm thấy cú pháp chính xác để xác định bộ lọc nhibernate sử dụng chế độ Nhibernate thông thạo.Cú pháp để xác định một bộ lọc NHibernate với Fluent Nhibernate?

Tôi đang cố gắng làm theo bài đăng trên blog của Ayende này:

http://ayende.com/Blog/archive/2006/12/26/LocalizingNHibernateContextualParameters.aspx

tôi xác định công thức về sở hữu của tôi với phương pháp .FormulaIs() nhưng không thể tìm thấy trên google làm thế nào để dịch nghĩa này để thông thạo nhibernate:

< filter-def name='CultureFilter'> 
    < filter-param name='CultureId' type='System.Int32'/> 
< /filter-def> 

Trả lời

6

This recent post trong các cuộc thảo luận thành thạo NHibernate dẫn tôi để tin rằng bộ lọc chưa được hỗ trợ bởi các API thạo.

+3

Đã bỏ phiếu vì tính năng không được hỗ trợ tại thời điểm trả lời sau này được hỗ trợ? Đó là khắc nghiệt. –

+0

Tôi đồng ý rằng một downvote là khắc nghiệt, nhưng bạn vẫn có thể muốn cập nhật câu trả lời của bạn để lưu ý trạng thái hiện tại của khuôn khổ. –

9

Trong trường hợp bất kỳ ai vẫn đang xem nội dung này, tôi vừa gửi bản vá trên mã Google cho Fluent NHibernate để hỗ trợ các bộ lọc. Bạn có thể nhìn thấy nó trong sử dụng trong câu trả lời của snicker ở trên.

58

Nếu bạn xây dựng Lưu loát từ nguồn, hiện tại có hỗ trợ cho bộ lọc. Bạn sử dụng chúng như thế này:

Đầu tiên tạo ra một lớp kế thừa từ FluentNHibernate.Mapping.FilterDefinition:

using FluentNHibernate.Mapping; 

namespace PonyApp.FluentFilters 
{ 
    public class PonyConditionFilter : FilterDefinition 
    { 
     public PonyConditionFilter() 
     { 
      WithName("PonyConditionFilter") 
       .AddParameter("condition",NHibernate.NHibernateUtil.String); 
     } 
    } 
} 

Trong ClassMap của bạn cho lớp học của bạn, sử dụng phương pháp ApplyFilter:

namespace PonyApp.Entities.Mappings 
{ 
    public class PonyMap : ClassMap<Pony> 
    { 
     public PonyMap() 
     { 
      Id(x => x.Id); 
      Map(x => x.PonyName); 
      Map(x => x.PonyColor); 
      Map(x => x.PonyCondition); 
      ApplyFilter<PonyConditionFilter>("PonyCondition = :condition"); 
     } 
    } 
} 

Sau đó, thêm bộ lọc để bạn cấu hình thông thạo:

Fluently.Configure() 
    .Mappings(m => m.FluentMappings.Add(typeof(PonyConditionFilter))) 
    //blah blah bunches of other important stuff left out 
    .BuildSessionFactory(); 

Sau đó, bạn có thể bật tính năng này và tắt giống như bạn làm với vanilla NHibernate:

session.EnableFilter("PonyConditionFilter").SetParameter("condition","Wonderful"); 
+0

2013 - tính năng này hiện có sẵn trong fluentNHibernate mà không cần xây dựng từ các nguồn. –

+1

Nhận xét của bạn đã giúp tôi rất nhiều. Cảm ơn bạn. Nhân tiện, ngăn chặn để thêm bộ lọc vào cấu hình thông thạo của bạn là không cần thiết nếu đã có một dòng như: . Ánh xạ (m => m.FluentMappings.AddFromAssemblyOf ()) vì Fluent NHibernate sẽ "phát hiện" nó. – iberodev

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