2009-06-09 19 views
9

Tôi đang sử dụng phiên bản NHibernate 2.0.0.4000.NHibernate: Không có persister cho NHibernate.Criterion.SqlFunctionProjection

Trong một trong các truy vấn của tôi, tôi muốn sử dụng hàm sql dateadd để thêm một số ngày. Điều này đã không được đăng ký vì vậy tôi đã tạo ra phương ngữ riêng của mình và đã đăng ký chức năng như sau:

RegisterFunction("adddays", 
    new SQLFunctionTemplate(NHibernateUtil.DateTime, 
    "dateadd(dd, ?1, ?2)")); 

Đăng ký bị truy cập và có vẻ hoạt động tốt. Tôi sử dụng hàm trong truy vấn DetachedCriteria như sau:

... 
Restrictions.LtProperty("DateColumn1" 
    Projections.SqlFunction("adddays", NHibernateUtil.DateTime, 
     Projections.Constant(days), 
     Projections.Property("DateColumn2")) 
... 

Tiêu chí được trả về từ phương thức và được chuyển cho truy vấn khác. Khi thực hiện truy vấn cuối cùng, tôi nhận được ngoại lệ sau:

NHibernate.MappingException was caught 
    Message="No persister for: NHibernate.Criterion.SqlFunctionProjection" 
    Source="NHibernate" 
    StackTrace: 
     at NHibernate.Impl.SessionFactoryImpl.GetEntityPersister(String entityName, 
      Boolean throwIfNotFound) 
     at NHibernate.Impl.SessionFactoryImpl.GetEntityPersister(String entityName) 
     ... 

Không có bài đăng trên blog mà tôi đã thấy đề cập đến vấn đề này. Ai có thể giúp được không?

Cổ vũ trước. Nige.

Trả lời

6

Giải quyết.

Sự cố là do việc sử dụng của tôi ở nơi khác là Restrictions.Eq thay vì Restrictions.EqProperty. Trước đây không có một quá tải cho (IProjection,IProjection) và do đó đã được điều trị chiếu thứ hai như là một đối tượng và chuyển nó đến một persister.

Nhờ bất kỳ ai điều tra điều này. Nigel.

1

Đối Không Persister ngoại lệ trong dung dịch nhibernet là

chỉ đưa ra một click chuột phải vào file hbm tương ứng -> Properties-> thay đổi kiểu Build Action-> để nhúng Resource

với việc áp dụng bước trên sẽ hoạt động tốt

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