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

C# 如何确保使用Entity Framework 5插入幂等数据库?,c#,entity-framework-5,azure-sql-database,C#,Entity Framework 5,Azure Sql Database,我想确保我的数据库(SQL Server)更新是幂等的,在功能上与下面的博客文章类似,但使用实体框架(v5,数据库优先): 但是,如果我在insert proc中添加@Operation参数,则 “错误2037:映射函数绑定指定函数…但 不映射以下功能参数:操作“ (@操作将是一个GUID,由应用程序生成,如果没有从proc获得成功响应,则允许应用程序使用相同的GUID重试。proc将GUID写入日志表,并且仅在GUID不存在时执行插入操作,从而确保幂等事务。) 有一个优雅的解决方案吗?如果我

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

但是,如果我在insert proc中添加@Operation参数,则

“错误2037:映射函数绑定指定函数…但 不映射以下功能参数:操作“

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


有一个优雅的解决方案吗?

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

在insert proc中,可能会对GUID值使用try/catch甚至查询,而不使用try/catch,如果存在,则处理异常,或者通过RETURN语句以成功消息干净地退出该过程

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


还有最后一件事,可能是将CRUD insert/update语句包装在事务中,以确保实际编写的值与提供的示例相同。

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


如何映射该参数?我使用数据库优先的方法(编辑问题以澄清);在模型编辑器的存储过程映射窗口中,我无法编辑@Operation属性的映射。因此,对于您的评论,答案是我不是(因此出现错误!)。您是否将存储过程映射到实体的插入操作?在这种情况下,您的实体必须具有
Operation
属性。是的,但该实体没有Operation列-该参数是附加的。它只允许存储过程确保插入是幂等的。是否可以将存储过程映射为比基础实体具有更多列的插入操作?否,这是不可能的。