1
我試圖做到這一點:NHibernate的JoinQueryOver與不可見的屬性會引發異常
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>();
謝謝!你解決了我的兩個問題。我不喜歡硬編碼屬性名稱的映射,你的答案也解決了這個問題!最終的映射最終是:'Bag(x => x.ConfigValues,attr => {attr.Access(Accessor.Field); ...'。正確的語法來自[this post](http:// stackoverflow的.com /問題/ 7824319 /如何對生成存取場駝峯下劃線與 - nhibernates映射逐) – dstj