C# 在实体框架中使用存储过程实现n层数据同步
下面的问题是,当我直接将新数据插入sql数据库时,我有一个n层同步服务可以正常工作,但如果我在web应用程序中这样做的话就不行了 我的解决方案是,我在web应用程序中的插入不是通过我为sql数据库中所需表定义的存储过程来完成的 因此,我尝试在实体框架中实现这些存储过程,但出现以下错误: 错误2047:映射函数绑定使用不支持的参数:sync\u row\u count指定函数straschuInventarModel.Store.sp\u tblInventar\u applyinsert。只能通过RowsAffectedParameter属性映射输出参数。使用结果绑定从函数调用返回值 存储过程是通过从模型更新数据库来实现的 sql功能@@rowcount存在此错误,无法将其设置为在设计器中同步\u row\u count 用于插入tbl的存储过程C# 在实体框架中使用存储过程实现n层数据同步,c#,asp.net-mvc,synchronization,entity-framework-4.3,C#,Asp.net Mvc,Synchronization,Entity Framework 4.3,下面的问题是,当我直接将新数据插入sql数据库时,我有一个n层同步服务可以正常工作,但如果我在web应用程序中这样做的话就不行了 我的解决方案是,我在web应用程序中的插入不是通过我为sql数据库中所需表定义的存储过程来完成的 因此,我尝试在实体框架中实现这些存储过程,但出现以下错误: 错误2047:映射函数绑定使用不支持的参数:sync\u row\u count指定函数straschuInventarModel.Store.sp\u tblInventar\u applyinsert。只能通
ALTER procedure [dbo].[sp_tbl_applyinsert] (
@sync_last_received_anchor binary(8) ,
@sync_client_id_hash int ,
@sync_row_count int out,
@idInventar varchar(5) = NULL ,
@Aktiv bit = NULL)
as
insert into [tbl] ([idInventar],[Aktiv]
,[update_originator_id])
values (@idInventar, @Aktiv, @sync_client_id_hash)
set @sync_row_count = @@rowcount
任何帮助都将不胜感激 如果您对实际值不感兴趣,而是使用sync\u row\u count进行乐观并发检查,那么您只需选中参数映射中的复选框即可 除上述情况外,EF实体模型映射函数不支持输出参数。如果希望将该值设置为实体的属性,则可以删除该参数并返回该值作为结果:
ALTER procedure [dbo].[sp_tbl_applyinsert] (
@sync_last_received_anchor binary(8),
@sync_client_id_hash int,
@idInventar varchar(5) = NULL,
@Aktiv bit = NULL)
as
insert into [tbl] ([idInventar],[Aktiv],[update_originator_id])
values (@idInventar, @Aktiv, @sync_client_id_hash)
select @@rowcount as sync_row_count
然后,实体模型中sync_row_count的映射从参数映射移动到结果列绑定
如果不方便,也可以通过函数导入将存储过程公开为DbContext实例的常规方法。通过这种方式,您可以自由使用任何类型的参数。谢谢,这是一个非常简单的解决方案,正如您所写,我只需单击复选框“行受影响的参数”