2009-05-07 6 views
1

나는 바보 같다.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; 

"속성을 확인할 수 없음"오류가 발생합니다.

내가 뭘 잘못하고 있니? "somename"의 이름을 가진 속성 Foo를 가진 Uber 객체를 쿼리하고 싶습니다.

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

NHib의 버전은 무엇입니까? –

+0

2.0.1 GA, 최신 – kitsune

+0

지도를 게시 할 수 있다면? –

답변

5

:

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; 

    } 

클래스/매핑 : 능통 자 NHibernate를 사용하여 실생활의 예를 들어, 저장소 전화로 업데이트

, "ubercharged.AddOrder (Order.asc ("Foo.Name ")) 구문이 구문은 NHib 2.01에서 작동해야하며 그렇지 않은 경우 맵이 w가 아닙니다. 정확히 말하자.

스튜어트의 답변은 잘 작동합니다.

+0

감사합니다. 매핑이 올바르게 작동하지 않는 것 같습니다. 이것은 조금 더 나아 갔지만 ID가 현재 외래 키 요소에 대해 설정되지 않은 것 같습니다 ... – kitsune

+0

더 정확하게 매핑을 지정해야했습니다 ... 당신의지도에 감사드립니다! – kitsune

1

것은 당신이 종류 사용 가능 : 시도

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"); 
    } 
} 
관련 문제