Wpf Fluent惯例会破坏延迟加载吗?(未添加)
我在WPF应用程序中有一个简单的实体类,基本上如下所示:Wpf Fluent惯例会破坏延迟加载吗?(未添加),wpf,nhibernate,orm,fluent,unhaddins,Wpf,Nhibernate,Orm,Fluent,Unhaddins,我在WPF应用程序中有一个简单的实体类,基本上如下所示: public class Customer : MyBaseEntityClass { private IList<Order> _Orders; public virtual IList<Order> Orders { get { return this._Orders; } set {this._Orders = new ObservableCollect
public class Customer : MyBaseEntityClass
{
private IList<Order> _Orders;
public virtual IList<Order> Orders
{
get { return this._Orders; }
set {this._Orders = new ObservableCollection<Order>(value);}
}
}
公共类客户:MyBaseEntityClass
{
私人IList_订单;
公共虚拟IList命令
{
获取{返回此。_Orders;}
设置{this._Orders=newobserveCollection(value);}
}
}
我还在脱机实用程序中使用Fluent automapper创建一个NHibernate配置文件,然后在运行时加载该文件。这一切都很好,但由于我没有将原始集合传回NHibernate,所以我尝试添加一个约定,让NHibernate为我创建集合,这会对性能造成明显影响:
public class ObservableListConvention : ICollectionConvention
{
public void Apply(ICollectionInstance instance)
{
Type collectionType =
typeof(uNhAddIns.WPF.Collections.Types.ObservableListType<>)
.MakeGenericType(instance.ChildType);
instance.CollectionType(collectionType);
}
}
公共类ObservableListConvention:ICollectionConvention
{
public void Apply(ICollectionInstance实例)
{
类型集合类型=
typeof(uNhAddIns.WPF.Collections.Types.ObservableListType)
.MakeGenericType(实例.ChildType);
实例.CollectionType(CollectionType);
}
}
正如您所看到的,我正在使用一个unaddins集合,据我所知,它应该为约定和INotification更改提供支持,但出于某种原因,这样做似乎打破了延迟加载。如果我加载这样的自定义记录
var result = this.Session.Get<Customer>(id);
var result=this.Session.Get(id);
…然后Orders字段确实被分配了PersistentObservableGenericList类型的实例,但其EntityId和EntityName字段为空,并且尝试扩展Orders会导致可怕的“非法访问加载集合”消息
有人能告诉我我做错了什么和/或我需要做什么才能让它正常工作吗?假设原始代理对象(通常包含延迟加载Orders成员所需的客户ID)被未添加的集合项替换,而该集合项没有跟踪正确的对象,对吗
更新:我已经创建了,它没有直接引用unaddins项目,但是集合类是手动添加的。它的工作原理应该非常简单,但基本上它从域创建一个数据库,添加一个带有子列表的记录,然后尝试使用collection类作为子列表的实现将其加载回另一个会话。由于延迟加载失败而引发断言。我终于自己找到了答案……问题是由于我使用了ObservaleListType。在NHibernate语义中,列表是实体的有序集合,如果您想为IList使用某些东西,那么您需要一个无序集合,即包
在阅读了关于这个主题的答案后,我感到了一种惊喜。你能提供一个示例项目,让我试着看一下吗?我从来没有使用过Unaddins,但是我想看看它。谢谢Leo,我已经用一个链接更新了这个问题,链接到一个演示这个问题的测试项目。