如何确保使用Entity Framework 5插入幂等数据库?

时间:2013-03-16 09:48:34

标签: c# entity-framework-5 azure-sql-database

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

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

但是,如果我将@Operation参数添加到insert proc中,我会得到

  

“错误2037:映射函数绑定指定函数...但是   不映射以下函数参数:操作“

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

有优雅的解决方案吗?

2 个答案:

答案 0 :(得分:1)

实体框架6.1版将解决此问题。 (感谢EF团队 - 精彩的工作。)

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

答案 1 :(得分:0)

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

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

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

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