4

ICriteriaを使用して以下のクラスを実行しようとすると、

if (_userGroupId > 0 && _userId > 0 )
{
   return session.CreateCriteria(typeof(UserUserGroup))
             .Add(Restrictions.Eq("UserGroupID", _userGroupId))
               .Add(Restrictions.Eq("UserID", _userId))
               .Add(Restrictions.Eq("Deleted", false));
}

授業のために

public class UserUserGroup
{
    public virtual long UserUserGroupId { get; set; }
    public virtual long UserGroupId { get; set; }
    public virtual long UserId { get; set; }
    public virtual bool Deleted { get; set; }

    public UserUserGroup() {}

    public UserUserGroup(long userGroupId, long userId)
    {
        UserGroupId = userGroupId;
        UserId = userId;
    }

}

マッピング付き、

public void Override(AutoMapping<UserUserGroup> mapping)
    {
        mapping.Id(map => map.UserUserGroupId, "UserUserGroupID").GeneratedBy.HiLo("hibernate_unique_key", "next_hi", "100", "tablename='UserUserGroups'");
        mapping.Map(map => map.UserId,"UserID").Nullable();
        mapping.Map(map => map.UserGroupId,"UserGroupID").Nullable();
        mapping.Map(map => map.Deleted,"Deleted").Nullable();
    }

例外をスローします、

NHibernate.QueryException:プロパティを解決できませんでした:UserGroupID

プロパティを解決するにはどうすればよいですか?

4

1 に答える 1

6

クエリで列名を指定する代わりに、クラスのプロパティ識別子 (最後に小文字) を使用してみてください。

return session.CreateCriteria(typeof(UserUserGroup))
              .Add(Restrictions.Eq("UserGroupId", _userGroupId))
              .Add(Restrictions.Eq("UserId", _userId))
              .Add(Restrictions.Eq("Deleted", false))
              .List();

今後この種の問題を回避するには、コンパイル時に型チェックを提供するQueryOver APIを使用することをお勧めします。

return session.QueryOver<UserUserGroup>()
              .Where(x => x.UserGroupId == _userGroupId)
              .And(x => x.UserId == _userId)
              .And(x => x.Deleted == false)
              .List();
于 2012-06-26T00:50:32.417 に答える