【发布时间】:2019-11-04 18:02:46
【问题描述】:
我在后台工作人员中添加了一个新对象,新对象已成功添加,但如果尝试删除它,则会出现错误,因为新对象已从数据上下文中分离出来。
后台工作人员 Do_Work 事件
private void _anotherThread_DoWork(object sender, DoWorkEventArgs e)
{
testdbEntities context = new testdbEntities();
_item = new item();
this.txbItemName.Dispatcher.Invoke(new Action(delegate () { _item.name = this.txbItemName.Text; }));
context.item.Add(_item);
Application.Current.Dispatcher.BeginInvoke(new Action(() => this.ocItems.Add(_item)));
context.SaveChanges();
}
删除按钮(在主线程上) ,如果我附加了一个新对象,它就可以工作
private void btnDelete_Click(object sender, RoutedEventArgs e)
{
Item _selectedItem = (Item)lbItems.SelectedItem;
if (_context.Entry(_selectedItem).State == EntityState.Detached)
_context.Item.Attach(_selectedItem);
_context.Item.Remove(_selectedItem);
_context.SaveChanges();
}
我的问题是为什么新对象没有附加到数据上下文?我应该附加在后台工作人员中添加的每个新对象吗?
谢谢
【问题讨论】:
-
您如何/在哪里管理您的上下文?是相同的背景吗?你知道每个线程(bgw)都应该有自己的吗?
-
@HenkHolterman 是的,在 bgw 中,我启动了我的数据库上下文的新实例
-
您能否更新您的问题并添加创建新对象的相关代码段?
-
@devlincarnate 我更新了我的问题。
-
这似乎很明显:这里有 2 个数据上下文。一个条目只能属于一个。
标签: c# wpf entity-framework backgroundworker