【发布时间】:2010-12-11 00:11:28
【问题描述】:
我在 SQL Server 中有一个类似于以下内容的表:
Col1 Id -Int and Key
Col2 ProductId int
Col3 ProductDesc Varchar
在我的 Silverlight 应用程序中,我有两个网格显示该表中的数据 - 由 ProductId 分隔 - 换句话说,我将所有产品 A 放在一个网格中,将所有产品 B 放在另一个网格中。
当我选择任一网格中的任何项目时,我会将其写到表格中。如果我从网格中取消选择一个项目,我会从表格中删除该行。由于 Silverlight 使用异步调用,当一个网格忙时,用户仍然可以使用另一个网格(这是我想要的)。但是,如果用户在从另一个网格插入项目时取消选择一个网格中的项目,则会出现死锁错误。
我的所有插入都在每个实体更新后完成,并且我调用了 SubmitChanges()。正在以不同的方式处理删除。由于 EF 中没有 DeleteAll,我使用对象上下文的 ExecuteStoreCommand() 并提交 DELETE 查询 - 这可能是我的问题来自。
如何使用同一张表来完成此操作而不会出现死锁错误?我真的想避免为每个网格创建一个单独的表。
如果我使用 EF 从我的实体中删除而不是 ExecuteStoreCommand() 会更好地处理死锁吗?将表加载到内存中似乎是一种资源腰围,一次删除每一行。
编辑:我想补充一点,当我从 talbe 中删除同时 EF 插入其中时,我验证了我的死锁。
谢谢,
-斯科特
【问题讨论】:
标签: sql-server entity-framework deadlock