Ric*_*d B 4 c# nhibernate nhibernate-mapping
我对nHibernate有一个奇怪的问题......我得到了这个异常:
Unable to resolve property: _Portal
Run Code Online (Sandbox Code Playgroud)
当我尝试提交对象图时.奇怪的是,当我在整个解决方案搜索,我似乎没有这个特定属性ANYWHERE项目中?
有没有人遇到过这种特殊情况,如果有的话,他们做了什么来解决?
在将nHibernate升级到3.3(从3.1)以及相关库(包括FluentNhibernate)之后,我遇到了同样的问题.我有一个带有子集合的父对象,并且在修改子集合时,它将抛出您收到的相同异常(使用不存在的"_Namespace"属性名称,其中"Namespace"是我实际命名空间的第一部分).
在我们的例子中,切换到SaveOrUpdate()不是一个选项,因为我们实际上在会话中加载了此对象的一个版本,因此我们需要Merge().
我不知道可能有什么其他相似之处.对我们来说,它是一个带有子集合的父对象,使用FluentNhibernate.父对象的映射是子级的Cascade.AllDeleteOrphan(),以及子级到子级的Cascade.None().
不幸的是我找不到任何关于这个bug的其他报告,所以我们的解决方案就是恢复到nHibernate 3.1(以及相关的二进制文件,如FluentNhibernate和Iesi.Collections).这是唯一的变化,然后再次正常工作.
更新JIRA [3234]中记录的错误.
在JIRA中记录了一个错误.该问题尚未得到任何优先考虑.也许如果您遇到此问题,您可以创建一个帐户并投票修复该错误. https://nhibernate.jira.com/browse/NH-3234
针对bug JIRA发布的变通方法更新[3234].
根据Ondrej对该bug的评论,使用此代码覆盖会话配置上的默认合并侦听器解决了此问题.我相信已发布的解决方法很快就会正式修复.
public class UniDirectionalMergeFixListener : DefaultMergeEventListener
{
protected override IDictionary GetMergeMap(object anything)
{
var cache = (EventCache)anything;
var result = IdentityMap.Instantiate(cache.Count);
foreach (DictionaryEntry entry in cache)
result[entry.Value] = entry.Key;
return result;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1519 次 |
| 最近记录: |