【发布时间】:2013-06-26 13:08:49
【问题描述】:
我有一个非常复杂的系统问题,当用户使用 asp webforms 提交页面时,将运行许多存储过程。它会更新或删除相关表中的某些项目,但由于这一切都发生在存储过程中,linq to sql 不知道这个逻辑,所以它的缓存仍然在那里,删除的项目在其缓存中。
我看到的问题归结为正在更新基于复合键的表,因此所有内容都通过存储过程删除,然后重新创建项目并插入新值,但是如果您假设实体看起来像:
public class SomeCompositeEntity
{
public long UserId {get;set;}
public smallint ActionTypeId {get;set;}
public int ActionValue {get;set;}
}
所以在这种情况下,如果我有 10 个,并更新了 3 个,所有这些都将通过这个存储过程被删除,然后将被重新创建,其中 7 个与现有的相同,3 个相同但不同的 ID价值观。
问题是虽然删除只发生在 DB 空间中,但 linq 不知道这一点,所以当您尝试保存这些 linq 到 sql 的实体时,它仍然会因 DuplicateKeyException 而爆炸,这样做是正确的.
因此,如果我要捕获 DuplicateKeyException 然后获取实体并告诉 linq to sql 刷新它以覆盖数据库中的更改,如果对象已被删除,它会从缓存中删除它吗?因为文档不清楚吗?
我很想删除存储过程和许多其他令人费解的过程,但客户坚持认为它不能更改,以防它以某种方式触发末日......所以考虑到我在这里的位置,如果有的话对于如何处理这种情况有任何其他想法,那就太好了。
【问题讨论】:
标签: c# linq-to-sql stored-procedures datacontext