2010-06-21 21 views
6

Khi tôi cố gắng truy vấn một bảng bằng cách sử dụng CreateSqlQuery và chuyển đổi nó thành một thực thể có chứa thuộc tính công thức, tôi nhận được dưới đây Adoexception.CreateSqlQuery trên thực thể với thuộc tính công thức

"Giá trị không thể được null Parameter tên:. FieldName"

Trong chỗ thứ nhứt là nó có thể sử dụng createsqlquery trên thực thể có bản đồ công thức?

Trả lời

7

Có thể sử dụng CreateSQLQuery với công thức.

Dưới đây là bằng chứng về khái niệm. Mapping (lớp là không khó để đoán):

<class name="Foo"> 
    <id name="Id"> 
    <generator class="hilo"/> 
    </id> 
    <property name="Data"/> 
    <property name="DataX2" formula="Data * 2"/> 
</class> 

Và đây là một truy vấn:

var foos = session.CreateSQLQuery(
        @" 
        select Id   as {foo.Id}, 
          Data  as {foo.Data}, 
          Data + Data as {foo.Data2} 
        from Foo 
        ") 
        .AddEntity("foo", typeof(Foo)) 
        .List<Foo>(); 

Nếu bạn nhìn kỹ, bạn sẽ thấy rằng tôi đang sử dụng một công thức khác với một tuyên bố trong bản đồ. NHibernate cho phép bất cứ điều gì miễn là tất cả các thuộc tính có trong truy vấn.

Tôi khuyên bạn nên đọc 17.1.2. Entity queries và các điểm sau đây.

+0

Giải pháp của bạn ở đây dường như chỉ là một công việc xung quanh một lỗi thực sự tồn tại. –

+0

@GaryB nếu bạn cho rằng có lỗi, vui lòng mở một sự cố trong trình theo dõi, đảm bảo bao gồm kiểm tra đơn vị không thành công, –

+0

Đủ công bằng. Tôi không quen với mối quan hệ giữa theo dõi vấn đề Nhibernate và Hibernate. Tôi nói nó là một lỗi bởi vì nó đã được tuyên bố một trong Hibernate nhưng dường như không phải trong Nhibernate vì vậy nó không phải là hoàn toàn công bằng cho tôi gọi nó là một liên quan đến Nhibernate. Tại thời điểm này tôi hài lòng với giải pháp bí danh do đó tôi không tìm thấy nó trong quan tâm của tôi để tạo ra một vấn đề Nhibernate. –

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