我有一个基于ObservableCollection的数据网格中显示的EF数据库上下文。用户可以编辑网格,并且全部显示正常。查找Observable Collection中更改的项目
但是我现在需要将数据发送回数据库。我不想将集合中的所有项目都发送到我的保存方法,所以我只能找到已在集合中进行更改的项目?
我有一个基于ObservableCollection的数据网格中显示的EF数据库上下文。用户可以编辑网格,并且全部显示正常。查找Observable Collection中更改的项目
但是我现在需要将数据发送回数据库。我不想将集合中的所有项目都发送到我的保存方法,所以我只能找到已在集合中进行更改的项目?
您可以使用NotifyCollectionChangedAction
检测哪些项目已在ObservableCollection
被改变。然而,仅仅Jens
说,最好的办法是让EF为您处理。
干杯。
ObservableCollection<int> listOfObject = new ObservableCollection<int>() { 1, 2, 3, 4};
listOfObject.CollectionChanged += new System.Collections.Specialized.NotifyCollectionChangedEventHandler(
delegate (object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
{
if (e.Action == System.Collections.Specialized.NotifyCollectionChangedAction.Add)
{
Console.WriteLine($"{e.NewItems[0]} just been added to the list at index = {e.NewStartingIndex}");
}
if (e.Action == System.Collections.Specialized.NotifyCollectionChangedAction.Replace)
{
Console.WriteLine($"Replace item {e.OldItems[0]} with {e.NewItems[0]}");
}
}
);
listOfObject.Add(1);
listOfObject[2] = 3;
listOfObject[3] = 1;
输出:
1刚刚被添加到所述列表中索引= 4
替换项3 3
用1
嗨,谢谢,请看我对@Jens的看法,为什么我认为EF不适合我。但是感谢我将要测试的这个解决方案。有没有办法解决我的EF问题? –
了,更换项目4您尝试使用'DbContext.SaveChanges'保存所有内容并遇到性能问题?这些框架通常非常聪明,可以避免不必要的工作。 – Jens
我同意@Jens,如果你没有在EF中做任何配置更改,它应该跟踪实体的变化并决定是否应该保存。 – chameleon86
如果通过“发送到数据库”,您的意思是简单地将实体保存到本地数据库,那么我同意@Jens。但是,如果您在远程服务器上使用数据库(例如,通过_WCF_服务),并且您只想传输脏实体以减少网络流量,则“ObservableCollection”中没有内置功能来跟踪对其项目的更改。你可以看看['BindingList '](https://msdn.microsoft.com/en-us/library/ms132679(v=vs.110).aspx)(及其ListChanged事件)。或者,如果可能的话,创建空的_EF_上下文,用初始对象填充它,并利用其跟踪机制。 –
Grx70