2013-08-21 44 views
5

Tôi đang sử dụng phiên bản mới nhất của NHibernate (3.3.1.4000) từ NuGet trong .Net 4 nhắm mục tiêu dự án trong Visual Web Developer 2010 Express.NHibernate QueryOver Bí danh Phát hành

Khi tôi cố gắng làm theo các ví dụ tôi đã thấy để xác định bí danh, tôi nhận được ngoại lệ khi thiết lập chúng bằng lambdas (xem ảnh chụp màn hình).

Shows error 'Cannot convert lambda expression to type 'string'...

Như bạn có thể thấy tôi đang nhận được lỗi Cannot convert lambda expression to type 'string' because it is not a delegate type.

Tôi có tham chiếu đến các không gian tên LINQ trong top của mã của tôi:

using System.Linq; 
using System.Linq.Expressions; 

Bất kỳ suy nghĩ về những gì có thể gây ra vấn đề?

Trả lời

8

Để sử dụng một biến như role trong một biểu thức, bạn phải xác định nó lần đầu tiên, như vậy ...

Role roleAlias = null; // <-- these two lines are missing from your code. 
Person personAlias = null; 

var x = session.QueryOver<Role>(() => roleAlias) 
    .JoinAlias(r => r.People,() => personAlias) 
    // ... 

ISession.QueryOver<T>(...) có bốn quá tải:

  • .QueryOver<T>()
  • .QueryOver<T>(Expression<Func<T>> alias)
  • .QueryOver<T>(string entityName)
  • .QueryOver<T>(string entityName, Expression<Func<T>> alias)

Rõ ràng bởi vì nó không thể tìm ra những gì role là, nó giả sử bạn đang cố gắng sử dụng quá tải .QueryOver<T>(string entityName), vì thế mà "không thể chuyển đổi ... để gõ 'chuỗi'" thông báo lỗi.

+0

Cảm ơn bạn, đây có vẻ là câu trả lời đúng. Tôi nghĩ có chuyện gì đó đang xảy ra. Không nhận ra tôi cần tạo các biến để sử dụng chúng làm bí danh. Nhưng sau khi đọc câu trả lời của bạn, tôi đã quay trở lại các tài liệu, và chắc chắn nó có ngay trong 16.5. Bí danh (http://nhforge.org/doc/nh/en/index.html#queryqueryover-aliases). – Sam