我想确保我的数据库(SQL Server)更新是幂等的,功能类似于下面的博客文章,但使用实体框架(v5,数据库优先):
但是,如果我将@Operation参数添加到insert proc中,我会得到
“错误2037:映射函数绑定指定函数...但是 不映射以下函数参数:操作“
(@Operation将是一个GUID,由应用程序生成,允许应用程序使用相同的GUID重试,如果它没有从proc获得成功响应.proc将GUID写入日志表,并且只有在GUID不存在时才执行插入 - 从而确保幂等事务。)
有优雅的解决方案吗?
答案 0 :(得分:1)
实体框架6.1版将解决此问题。 (感谢EF团队 - 精彩的工作。)
答案 1 :(得分:0)
如果我理解你的查询 - 如何在保存GUID的列上应用唯一约束,然后如果在执行proc之后没有得到成功响应,请重试插入。
在insert proc中可能使用try / catch或甚至查询GUID值没有Try / Catch,如果它在那里处理异常,或者只是通过RETURN语句通过成功消息干净地退出proc。
我认为你不需要在EF方面做任何特别的事情。
最后一件事,可能是将CRUD插入/更新语句包装在事务中,以确保实际上写入的值与提供的示例一样。