كيف لي أن الاستعلام عن subproperty الملكية كائن استمر لفي nhibernate؟

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

سؤال

وأشعر أنني غبية.

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".

وتحديثها مع مثال واقع الحياة، والدعوة مستودع، وذلك باستخدام nhibernate بطلاقة:

    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;

    }

والطبقات / تعيينات:

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");
    }
}
هل كانت مفيدة؟

المحلول

وجرب هذا:

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

نصائح أخرى

هل أنت نوع باستخدام "ubercharged.AddOrder (Order.asc (" Foo.Name ")) في بناء الجملة؟ بناء الجملة هذا يجب أن تعمل في NHib 2.01. إذا لم يكن كذلك، الخرائط الخاصة بك لا تعمل بشكل صحيح.

والجواب ستيوارت يجب أن تعمل بشكل جيد بالنسبة لك بالرغم من ذلك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top