刷新实体框架集合属性

时间:2015-09-22 06:18:41

标签: c# wpf entity-framework

我试图更新我的实体框架6实体的部分内容,特别是来自数据库中数据的集合。第一次从数据库中读取数据的速度很快,因此应该可以快速再次读取数据。

处理上下文并创建一个新上下文很快,但它对我不起作用,因为这样做会导致用户添加的信息丢失。

所以在这种情况下,我有一个名为Evaluation的类,Evaluation通过Class Amount to Classification有一个多对多的关系。分类反过来与物质有n-1关系,即一种物质可以有多种分类。

评估和金额在程序A中处理,而分类和物质在程序B中处理。用户经常在程序B中进行更新,他们必须能够在程序A中看到更新,而上下文已经打开。 / p>

在我的用户界面中,用户将分类添加到评估中,用户首先从数据网格中选择一种物质,然后第二个数据网格显示与所选物质相关的分类。

物质会按原样更新,因为wpf绑定是一个始终从数据库中读取的属性(使用一些搜索参数),因此如果添加或删除物质,则会在UI中添加或删除它们同样。)

我还设法通过绑定到返回的属性来刷新分类:

  

_context.Classifications.Where(c => c.SubstanceID == SelectedSubstance.SubstanceID)。ToList();

而不仅仅是绑定到Substance的导航属性。

通过这种方式,UI中会注意到分类的添加和删除。如果我更改Classification属性(在datagrid中显示),则不会注意到该更改。并不是用户界面没有更新的问题,视图模型也具有旧的价值。

我可以通过执行以下操作来更新属性:

  

_context.Entry(分级).Reload(); //对于单个实体来说非常慢!

分类通过实体ClassificationToRiskPhrase与RiskPhrase有n-m关系,这些风险字数通过转换器显示在datagrid中。起初,我无法获得添加或删除的ClassificationToRiskPhrases,但这样做:

  

_context.Entry(Classification).Collection(c => c.ClassificationToRiskPhrases).Query()。ToList());

显示添加内容,但如果我删除ClassificationToRiskPhrase,则不会显示此内容。

所以我的第一个问题是:如何更新实体以便注意其中一个集合导航属性中的删除?

我的第二个问题更为笼统:一般来说,处理部分更新的好方法是什么,有没有人知道任何形式的文学作品?我想在用户编辑某个实体的过程中保持上下文存活是很常见的吗?我知道短暂的上下文是首选的,但为了防止所有更改被自动保存,必须在执行context.SaveChanges()之前等待。

0 个答案:

没有答案