Mam kwerendę, która pracowała w NHibernate LINQ 2.1.2 ale to jest rzucanie NotSupportedException NH3:NHibernate 3 LINQ przyłączyć wewnętrzny problem z trzech skoków: 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;
Relacje są jak:
- Flower Referencje Stem
- macierzyste hasMany Kwiaty
- liści Referencje Stem
- Pytanie HasMany Leaves
Wyjątek jest generowany z wiersza 204 w NHibernate.Linq.Visitors.QueryModelVisitor. Oto metoda z kodu źródłowego:
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);
}
Wydaje mi się ten sam problem jest omawiany w ramach wątku:
ramach tego wątku Stefan wspomina, że składnia nie jest obsługiwana :
dostawca LINQ spodziewa wyrażenie być:
QuerySourceReferenceExpression. Użytkownik
Jednak w przypadku z BRW w loan.Application.Borrowers ona:
QuerySourceReferenceExpression. Członek. Członek
Jest to z pewnością nieobsługiwana funkcja .
Czy ta składnia będzie obsługiwana w dowolnym momencie w NH3 LINQ? Myślę, że jest to trywialna składnia i dobrze jest mieć.
Jednak mogę obejść ten problem przez przepisywanie kwerendy jako:
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, ktoś ma lepszy obejście?
nhusers link: http://groups.google.com/group/nhusers/browse_thread/thread/334a53c749b0b377
Opieki wyjaśnić -1? Zaproponowałem użyteczne sugestie dotyczące tego, w jaki sposób problem może zostać wyświetlony i/lub ostatecznie rozwiązany. Tylko dlatego, że jest to odpowiedź, której nie chcesz słyszeć, nie oznacza, że powinna zostać odrzucona. ;-) – mpontillo
dostaniesz mój głos. Wielu ludzi .Net myśli o OSS tak samo jak komercyjnych aplikacjach i nigdy nie zastanawia się, w jaki sposób mogą się wesprzeć. (Mimo, że powiedział, że nawet jako doświadczony programista, baza kodu NH jest onieśmielająca) –
Właśnie znalazłem [ten artykuł] (http://nhforge.org/blogs/nhibernate/archive/2008/10/04/the-best- way-to-solve-nhibernate-bugs-submit-good-unit-test.aspx), które mogą być pomocne podczas przechodzenia przez tę ścieżkę. – mpontillo