Tôi có một truy vấn mà đã từng làm việc trong NHibernate LINQ 2.1.2 nhưng nó được ném NotSupportedException với NH3:NHibernate LINQ 3 bên tham gia vấn đề với ba bước nhảy: NotSupportedException
IQueryable<Tree> query = from flower in GetSession().Query<Flower>()
from leaf in flower.Stem.Leaves // <--- the problem is here with three jumps
where leaf.Color == Green
select flower;
Quan hệ cũng giống như:
- Flower Tài liệu tham khảo gốc
- gốc HasMany Flowers
- Leaf Tài liệu tham khảo gốc
- Thân cây HasMany Lá
Ngoại lệ được ném từ dòng 204 trong NHibernate.Linq.Visitors.QueryModelVisitor. Dưới đây là phương pháp từ mã nguồn:
public override void VisitAdditionalFromClause(AdditionalFromClause fromClause, QueryModel queryModel, int index)
{
if (fromClause is LeftJoinClause)
{
// It's a left join
_hqlTree.AddFromClause(_hqlTree.TreeBuilder.LeftJoin(
HqlGeneratorExpressionTreeVisitor.Visit(fromClause.FromExpression, VisitorParameters).AsExpression(),
_hqlTree.TreeBuilder.Alias(fromClause.ItemName)));
}
else if (fromClause.FromExpression is MemberExpression)
{
var member = (MemberExpression) fromClause.FromExpression;
if (member.Expression is QuerySourceReferenceExpression)
{
// It's a join
_hqlTree.AddFromClause(_hqlTree.TreeBuilder.Join(
HqlGeneratorExpressionTreeVisitor.Visit(fromClause.FromExpression, VisitorParameters).AsExpression(),
_hqlTree.TreeBuilder.Alias(fromClause.ItemName)));
}
else
{
// What's this?
throw new NotSupportedException(); // <--------- LINE 204
}
}
else
{
// TODO - exact same code as in MainFromClause; refactor this out
_hqlTree.AddFromClause(_hqlTree.TreeBuilder.Range(
HqlGeneratorExpressionTreeVisitor.Visit(fromClause.FromExpression, VisitorParameters),
_hqlTree.TreeBuilder.Alias(fromClause.ItemName)));
}
base.VisitAdditionalFromClause(fromClause, queryModel, index);
}
Dường như với tôi cùng một vấn đề được thảo luận dưới các chủ đề sau:
Dưới rằng thread Stefan nói rằng cú pháp không được hỗ trợ :
các nhà cung cấp LINQ hy vọng sự biểu hiện là:
0.123.QuerySourceReferenceExpression. Thành viên
Tuy nhiên, trong trường hợp từ BRW trong loan.Application.Borrowers nó là:
QuerySourceReferenceExpression. Hội viên . Thành viên
Vì vậy, nó chắc chắn là một tính năng không được hỗ trợ .
Vì vậy, cú pháp này có được hỗ trợ bất cứ lúc nào trong NH3 LINQ không? Tôi nghĩ rằng đó là một cú pháp tầm thường và nó là tốt để có.
Tuy nhiên tôi có thể đi xung quanh vấn đề này bằng cách viết lại các truy vấn như:
IQueryable<Tree> query = from stem in GetSession().Query<Stem>()
from leaf in stem.Leaves
from flower in stem.Flowers
where leaf.Color == Green
select flower;
BTW, bất cứ ai có một cách giải quyết tốt hơn?
nhusers liên kết: http://groups.google.com/group/nhusers/browse_thread/thread/334a53c749b0b377
Chăm sóc để giải thích -1? Tôi đã cung cấp các đề xuất hữu ích về cách vấn đề có thể kết thúc để có được khả năng hiển thị và/hoặc cuối cùng được giải quyết. Chỉ vì đó là câu trả lời mà bạn không muốn nghe không có nghĩa là nó sẽ bị bỏ phiếu. ;-) – mpontillo
bạn nhận được phiếu bầu của tôi. Rất nhiều người .Net nghĩ về PMNM giống như các ứng dụng thương mại và không bao giờ nghĩ về cách họ có thể tự đóng góp. (Mặc dù, điều đó nói rằng, ngay cả khi một nhà phát triển có kinh nghiệm, các codebase NH là đáng sợ) –
Chỉ cần tìm thấy [bài viết này] (http://nhforge.org/blogs/nhibernate/archive/2008/10/04/the-best- cách-to-giải-nhibernate-bugs-submit-tốt-đơn vị-test.aspx) mà có thể hữu ích khi đi xuống con đường này. – mpontillo