NHibernate JoinQueryOver с невидимым свойством выдает исключение - PullRequest
1 голос
/ 22 ноября 2011

Я пытаюсь сделать это:

Key key = session.QueryOver<Key>()
                 .Left.JoinQueryOver<ConfigValue>(x => x.ConfigValues)
                 .Where(c => c.Id == cfgValue.Id)
                 .SingleOrDefault();

Но я получаю это исключение:

NHibernate.QueryException was unhandled by user code
  Message=could not resolve property: ConfigValues of: Domain.Model.Key

Я полагаю, это потому, что объект Key объявлен так, чтобыограничить доступ к IList и сопоставить с невидимым свойством.

public class Key
{
    public virtual int Id { get; protected set; }

    public virtual IEnumerable<ConfigValue> ConfigValues { get { return _configValues; } }
    private IList<ConfigValue> _configValues = new List<ConfigValue>();
    ...

и сопоставить с кодом как:

Bag<ConfigValue>("_configValues", attr => {
    attr.Lazy(CollectionLazy.Lazy);
    attr.Inverse(false);
    attr.Cascade(Cascade.None);
}, cm => cm.ManyToMany());

Вопрос : Как я могу сделатьс помощью NHibernate API?

Единственный способ, которым мне удалось это сделать, - это HQL:

IList<Key> keys = session.CreateQuery(@"select K_
   from Key as K_
   left outer join K_._configValues as KO_
   where KO_.Id = :cfgValueId ")
        .SetParameter("cfgValueId", cfgValue.Id)
        .List<Key>();

1 Ответ

2 голосов
/ 23 ноября 2011

Я не уверен в отображении кода, но что-то вроде

Bag<ConfigValue>("ConfigValues", attr => {
    attr.Access("field.camelcase-underscore");
}, cm => cm.ManyToMany());

или Свободный NHibernate (если кому-то интересно)

HasMany(x => x.ConfigValues)
    .Access.CamelCaseField(Prefix.Underscore);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...