NHibernate Lambda Extensions ne pouvez pas utiliser n'importe quel alias requête sur DetachedCriteria

StackOverflow https://stackoverflow.com/questions/2449010

Question

Je suis en train d'écrire une requête simple qui nécessite un alias que c'est un plusieurs-À-Plusieurs assocation cependant je ne peux pas le faire fonctionner avec NH Lambda Extensions.Il me donne toujours une erreur de compilation, même si ce que je peut dire c'est exactement la même que la documentation et tous les exemples que j'ai vu en ligne.

Fonctionne

var query = DetachedCriteria.For<County>()            
    .CreateCriteria("Zips", "zipAlias", JoinType.LeftOuterJoin)
    //.CreateCriteria<County>(x => x.Zips, 
    //                              () => zipAlias, JoinType.LeftOuterJoin)
    .Add<Zip>(zip => zip.ZipCode == zipCode);

Ne fonctionne pas

var query = DetachedCriteria.For<County>()            
    //.CreateCriteria("Zips", "zipAlias", JoinType.LeftOuterJoin)
    .CreateCriteria<County>(x => x.Zips, 
                                    () => zipAlias, JoinType.LeftOuterJoin)
    .Add<Zip>(zip => zip.ZipCode == zipCode);

Résultats dans un build Error 22 The name 'zipAlias' does not exist in the current context

Intellisense met également en évidence le CreateCriteria**<County>** en disant qu'il ne comprend pas la méthode mais il n'correctement montrez-moi les noms de paramètre lorsque je suis à l'intérieur des parenthèses.

Était-ce utile?

La solution

L' la documentation est pleine d'exemples pratiques.

Votre zipAlias doit être une variable dans la portée locale.

Zip zipAlias = null;
string zipCode = "";

var query = DetachedCriteria.For<County>()
    .CreateCriteria<County>(x => x.Zips, () => zipAlias, JoinType.LeftOuterJoin)
    .Add<Zip>(zip => zip.ZipCode == zipCode);

Comme la documentation lien de téléchargements au lieu de rendu, je l'ai copié certaines sections.

Créer Des Critères D'Association Avec Alias
À l'aide d'origine ICriteria API:

ICriteria before = CreateSession()
    .CreateCriteria(typeof(Person))
        .CreateCriteria("Children", "childAlias")
            .Add(Restrictions.Eq("Nickname", "test"));

À L'Aide De NHibernate Lambda Extensions:

Child childAlias = null;
ICriteria after = CreateSession()
    .CreateCriteria(typeof(Person))
        .CreateCriteria((Person p) => p.Children, () => childAlias)
            .Add<Child>(c => c.Nickname == "test");

Créer Des Critères Alias Association Avec Alias Et Le Type De Jointure
À l'aide d'origine ICriteria API:

ICriteria before = CreateSession()
    .CreateCriteria(typeof(Person), "personAlias")
        .CreateCriteria("personAlias.Children", "childAlias", JoinType.LeftOuterJoin)
            .Add(Restrictions.Eq("Nickname", "test"));

À L'Aide De NHibernate Lambda Extensions:

Person personAlias = null;
Child childAlias = null;
ICriteria after = CreateSession()
    .CreateCriteria(typeof(Person), () => personAlias)
        .CreateCriteria(() => personAlias.Children, () => childAlias, JoinType.LeftOuterJoin)
            .Add<Child>(c => c.Nickname == "test");

Créer Des Critères D'Association Avec L'Alias Et Le Type De Jointure
À l'aide d'origine ICriteria API:

DetachedCriteria before =
    DetachedCriteria.For<Person>()
        .CreateCriteria("Children", "childAlias", JoinType.LeftOuterJoin)
            .Add(Restrictions.Eq("Nickname", "test"));

À L'Aide De NHibernate Lambda Extensions:

Child childAlias = null;
DetachedCriteria after =
    DetachedCriteria.For<Person>()
        .CreateCriteria((Person p) => p.Children, () => childAlias, JoinType.LeftOuterJoin)
            .Add<Child>(c => c.Nickname == "test");
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top