2013-12-11 41 views
0

以下問題,我有一個n層同步服務,當我直接向我的sql數據庫中插入新數據時工作正常,但不是如果我在我的web應用程序中這樣做。在實體框架中使用存儲過程進行n層數據同步

我來到的解決方案,我在Web應用程序插入不是通過我爲我的SQL數據庫中所需的表定義的存儲過程完成的。

,所以我想實現在實體框架這些存儲過程,但我得到了以下錯誤:

錯誤2047:映射函數綁定指定的功能straschuInventarModel.Store.sp_tblInventar_applyinsert與不支持的參數:sync_row_count。輸出參數只能通過RowsAffectedParameter屬性映射。使用結果綁定從函數調用中返回值。

通過從模型更新數據庫實現存儲過程。

錯誤由sql特徵@@ rowcount存在,無法在設計器中被分配給sync_row_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  

任何幫助將感激!

回答

0

如果您對實際值不感興趣,而是使用sync_row_count進行樂觀併發檢查,則只需在參數映射中檢查Rows Affected Parameter複選框即可。

除了上面提到的情況,輸出參數在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你的實體模型的映射,然後從參數映射導致列綁定移動。

如果這樣做不方便,也可以通過函數import將存儲過程公開爲DbContext實例的普通方法。這樣你可以自由地使用任何你喜歡的參數。

+0

謝謝,這是一個非常簡單的解決方案,就像你寫的,我只需點擊複選框「Rows Affected Parameter」 – patr