gpt4 book ai didi

wpf - Fluent 约定会破坏延迟加载吗? (uNhAddIns)

转载 作者:行者123 更新时间:2023-12-04 10:28:51 24 4
gpt4 key购买 nike

我在 WPF 应用程序中有一个简单的实体类,它基本上如下所示:

public class Customer : MyBaseEntityClass
{
private IList<Order> _Orders;
public virtual IList<Order> Orders
{
get { return this._Orders; }
set {this._Orders = new ObservableCollection<Order>(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);
}
}

正如您所看到的,我正在使用 uNhAddIns 集合之一,据我所知,它应该为约定和 INotification 更改提供支持,但出于某种原因,这样做似乎会破坏延迟加载。如果我加载这样的自定义记录...
var result = this.Session.Get<Customer>(id);

...然后 Orders 字段确实被分配了一个 PersistentObservableGenericList 类型的实例,但它的 EntityId 和 EntityName 字段为空,并且尝试扩展订单会导致可怕的“非法访问加载集合”消息。

谁能告诉我我做错了什么和/或我需要做什么才能让它发挥作用?我是否假设原始代理对象(通常包含延迟加载 Orders 成员所需的客户 ID)被 uNhAddIns 集合项替换,该集合项没有跟踪正确的对象?

更新:我创建了 a test project demonstrating this issue ,它不直接引用 uNhAddins 项目,而是手动添加了集合类。它的工作方式应该非常简单,但基本上它从域创建一个数据库,添加一个带有子列表的记录,然后尝试使用集合类作为子列表的实现将其加载回另一个 session 。由于延迟加载失败而抛出断言。

最佳答案

我终于自己找到了答案……问题是由于我使用了 ObservableListType。在 NHibernate 语义中,列表是实体的有序集合,如果您想对 IList 使用某些东西,那么您需要一个无序集合,即 Bag。

阅读 another StackOverflow question 的答案后,我的 Eureka 时刻来了。关于这个话题。

关于wpf - Fluent 约定会破坏延迟加载吗? (uNhAddIns),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20184981/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com