2009-05-07 11 views
1

Je me sens bête.Comment suis-je censé interroger la sous-propriété de la propriété d'un objet persisté dans nhibernate?

public class Uber 
{ 
    public Foo Foo { get; set; } 
    public Bar Bar { get; set; } 
} 

public class Foo 
{ 
    public string Name { get; set; } 
} 

... 

var ubercharged = session.CreateCriteria(typeof(Uber)) 
.Add(Expression.Eq("Foo.Name", "somename")) 
.UniqueResult<Uber>(); 
return ubercharged; 

Ceci déclenche une erreur "Impossible de résoudre la propriété".

Qu'est-ce que je fais mal? Je veux interroger pour un objet Uber qui a une propriété Foo qui a un nom de "somename".

mis à jour avec l'exemple de la vie réelle, appel dépôt, en utilisant NHibernate couramment:

public UserPersonalization GetUserPersonalization(string username) 
    { 
     ISession session = _sessionSource.GetSession(); 

     var personuser = session.CreateCriteria(typeof(UserPersonalization)) 
      .Add(Expression.Eq("User.Username", username)) 
      .UniqueResult<UserPersonalization>(); 
     return personuser; 

    } 

Les classes/applications:

public class User 
{ 
    public virtual Guid UserId { get; set; } 
    public virtual string Username { get; set; } 
    public virtual string Email { get; set; } 
    public virtual string PasswordHash { get; set; } 
    public virtual string PasswordSalt { get; set; } 
    public virtual bool IsLockedOut { get; set; } 
    public virtual bool IsApproved { get; set; } 

} 

public class Person 
{ 
    public virtual int PersonId { get; set; } 
    public virtual string Name { get; set; } 
    public virtual Company Company { get; set; } 

} 

public class UserPersonalization 
{ 
    public virtual int UserPersonalizationId { get; set; } 
    public virtual Person Person { get; set; } 
    public virtual User User { get; set; } 
} 

public class UserMap : ClassMap<User> 
{ 
    public UserMap() 
    { 
     Id(x => x.UserId).GeneratedBy.Guid().ColumnName("UserId"); 
     Map(x => x.Username); 
     Map(x => x.PasswordHash); 
     Map(x => x.PasswordSalt); 
     Map(x => x.Email); 
     Map(x => x.IsApproved); 
     Map(x => x.IsLockedOut); 
    } 
} 

public class UserPersonalizationMap : ClassMap<UserPersonalization> 
{ 
    public UserPersonalizationMap() 
    { 
     WithTable("UserPersonalization"); 
     Id(x => x.UserPersonalizationId).ColumnName("UserPersonalizationId"); 
     References(x => x.Person).ColumnName("PersonId"); 
     References(x => x.User).ColumnName("UserId"); 
    } 
} 

public class PersonMap : ClassMap<Person> 
{ 
    public PersonMap() 
    { 
     Id(x => x.PersonId).ColumnName("PersonId"); 
     Map(x => x.Name); 
     References(x => x.Company).ColumnName("CompanyId"); 
    } 
} 
+0

Quelle version de NHib? –

+0

2.0.1 GA, le dernier – kitsune

+0

Si vous pouviez publier vos cartes? –

Répondre

5

Essayez ceci:

var ubercharged = session.CreateCriteria(typeof(Uber)) 
     .CreateCriteria("Foo") 
      .Add(Restrictions.Eq("Name", "somename")) 
      .UniqueResult<Uber>(); 
+0

Merci, il semble que les mappages ne fonctionnent pas correctement. Cela est allé un peu plus loin, mais il semble que les ID ne sont pas actuellement définis pour les éléments de clé étrangère ... – kitsune

+0

A dû spécifier les mappings plus précisément ... merci pour votre aide! – kitsune

1

Pouvez-vous trier en utilisant "ubercharged.AddOrder (Order.asc (" Foo.Name ")) syntaxe? Cette syntaxe devrait fonctionner dans NHib 2.01 Si non, vos cartes ne sont pas w orking correctement.

La réponse de Stuart devrait bien fonctionner pour vous.