6

我想确保我的数据库(SQL Server)更新是幂等的,功能类似于下面的博客文章,但使用实体框架(v5,数据库优先):

http://blogs.msdn.com/b/adonet/archive/2013/03/11/sql-database-connectivity-and-the-idempotency-issue.aspx

但是,如果我在我的插入过程中添加一个 @Operation 参数,我会得到

“错误 2037:映射函数绑定指定了一个函数……但未映射以下函数参数:操作”

(@Operation 将是由应用程序生成的 GUID,如果应用程序没有从 proc 获得成功响应,则允许应用程序使用相同的 GUID 重试。proc 会将 GUID 写入日志表,并且只执行如果 GUID 不存在则插入 - 从而确保幂等事务。)

有没有优雅的解决方案?

4

2 回答 2

1

Entity Framework 6.1 版将解决这个问题。(感谢 EF 团队 - 出色的工作。)

https://entityframework.codeplex.com/wikipage?title=Handling%20of%20Transaction%20Commit%20Failures%20

于 2014-02-19T11:45:10.383 回答
0

如果我正确理解了您的查询 - 如何在保存 GUID 的列上应用唯一约束,然后如果您在执行 proc 后没有收到成功响应,请重试插入。

在插入过程中,可能使用 try/catch 甚至查询没有 Try/Catch 的 GUID 值,如果它在那里处理异常,或者只是通过 RETURN 语句以成功消息干净地退出过程。

我认为您不需要在 EF 方面做任何特别的事情。

最后一件事,可能将 CRUD 插入/更新语句包装在事务中,以确保实际上像提供的示例中那样编写了一个值。

于 2013-06-13T06:50:02.917 回答