在内存中保留EF Code First模型

时间:2012-10-02 01:35:46

标签: c# wpf entity-framework

我有几个不同的wpf窗口,例如sales.xaml,buy.xaml。

两个窗口都使用相同的EF代码第一个型号sales.cs。

我在sales.xaml中为销售模型添加了一些价值,当sales.xaml关闭时,如何从sales.xaml中检索buy.xaml中的相同模型。

如果我没有将模型属性设置为静态,则数据将丢失。

谢谢。

2 个答案:

答案 0 :(得分:0)

一种选择是将模型的实例声明为StaticResource,然后在每个页面上访问它,并根据需要将实例设置为DataContext。

<Application.Resources>
 <Example:ViewModel x:Key="VM"/>
</Application.Resources>

...

 <UserControl.DataContext>
  <Binding Source="{StaticResource VM}"/>
 </UserControl.DataContext>

如果您在每个页面上执行此操作,那么任何更改都应该保留到全局存储在Application的ResourceDictionary中的实例。

答案 1 :(得分:0)

在任何情况下都不要使您的数据上下文保持静态。不要使用单身人士。不要让它全球化。

当您需要执行数据操作时,始终实例化新数据上下文。当操作完全时,您调用SaveChanges以便下次需要时,将返回数据。

原因是数据上下文被设计为短暂的。如果您将上下文设置为静态,则在应用程序的生命周期内永远不会销毁它。它将继续增长对象缓存,直到它最终耗尽内存。

数据上下文没有中止或回滚功能。它们被设计为在逻辑操作结束时被丢弃。假设您在数据上下文中添加了一个实体,然后是SaveChanges ..如果出现错误,则无法删除刚刚添加的数据。唯一受支持的方法是破坏上下文。