gpt4 book ai didi

.net - windows/WPF/Silverlight 应用程序中的 Entity Framework ObjectContext

转载 作者:行者123 更新时间:2023-12-04 20:59:52 25 4
gpt4 key购买 nike

我们正在使用 Entity Framework (准确地说是带有 RIA 服务的 Silverlight)编写 WPF 应用程序。我们通过应用程序使用共享的 ObjectContext,以便我们可以从跨模块共享数据中受益。

问题是 - 如果用户在他的工作期间打开让我们说历史销售,它会被加载到 ObjectContext 并保持在那里直到应用程序结束。所以应该使用另一种模式。

我知道 ObjectContexts 应该用作单个工作单元。但是,您如何让应用程序的其他部分知道某些内容发生了变化并且他们应该重新加载数据?

编辑:好的,EventAggregator,但是,这会导致所有其他部分重新加载它们的(可能大部分是重复的)数据。所有类型的实体组也可能需要许多事件。

你如何解决这些问题?我目前的解决方案是一种妥协——对整个应用程序使用的核心数据使用共享的 ObjectContext,以便它们可以自动共享和更新。并且对于大量数据,使用一个新的单独的ObjectContext。有更好的想法吗?

有没有办法从他们的 DataContext 中“释放”实体,以便垃圾收集器可以完成它的工作并释放内存?

最佳答案

等等,是 WPF 还是 Silverlight?在这种情况下,它们是非常不同的,我的答案会有所不同。

WPF解决方案

在 WPF 中,我会为每个表单创建一个 ObjectContext .这样,上下文将只持续与表单本身一样长。然后,您应该实现一个事件系统,以便在您保存对实体的更改时,您可以提醒其他表单他们可能需要刷新其数据(例如 INotifyPropertyChanged)。 Oren Eini wrote a pretty good article on this architecture using NHibernate in MSDN magazine .您应该能够从他的文章中获得架构概念。

Silverlight 解决方案

现在,Silverlight 不同了。 Silverlight 本质上只允许您在应用程序中使用一种表单。是的,您可以采取一些技巧将表单的根视觉导航到不同的“页面”,但它仍然只是一个表单,用户无法在一个 Silverlight RIA 中打开多个窗口。正因为如此,我会为每个 Silverlight RIA 实例创建一个 .Net RIA Services ObjectContext .请记住,RIA 服务不是与您的数据库的实际连接,它只是一个链接到 Web 服务的缓存和更改跟踪对象。因此,让这个对象存在更长时间是完全可以接受的,因为它不会占用任何服务器资源。如果您的 Silverlight RIA 打开多个浏览器窗口或有多个 Silverlight 对象,那么每个 Silverlight 实例应该有一个 ObjectContext。

在服务器上,您使用 Web 服务中的 Entity Framework ObjectContext,它应该只在一个请求的持续时间内存在 .您可以使服务越无状态,它们的可扩展性和性能就越高。您想打开 EF ObjectContext、使用它并尽快关闭它。

编辑:

如果你想要做的只是从对象上下文中分离一个对象,那么你可以使用 context.Detach(entity)方法。您可以找到 example of how to do this on MSDN .

关于.net - windows/WPF/Silverlight 应用程序中的 Entity Framework ObjectContext,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1949037/

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