Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在实体框架中使用存储过程实现n层数据同步_C#_Asp.net Mvc_Synchronization_Entity Framework 4.3 - Fatal编程技术网

C# 在实体框架中使用存储过程实现n层数据同步

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。只能通

下面的问题是,当我直接将新数据插入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的存储过程

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实例的常规方法。通过这种方式,您可以自由使用任何类型的参数。

谢谢,这是一个非常简单的解决方案,正如您所写,我只需单击复选框“行受影响的参数”