簡體   English   中英

EF ef Database.SqlQuery內部回滾到執行的存儲過程

[英]EF ef Database.SqlQuery internal rollback into executed stored procedure

我使用EF 6 Database.SqlQuery語句執行存儲過程,實現錯誤和事務處理,具有打開和關閉事務(處理多個記錄,如果只有一個記錄回滾有錯誤,並提交任何其他完成而沒有錯誤)。

List<T> _result = this.Database.SqlQuery<T>(sqlStatement, parameters).ToList();

EF使用自己的事務來執行Database.SqlQuery,但是當發生錯誤時,我回滾到存儲過程中,這個回滾也適用於EF transacton。 所以我得到了以下例外:

System.Data.SqlClient.SqlException(0x80131904):無法提交當前事務,也無法支持寫入日志文件的操作。 回滾交易。

在這種情況下,如何防止EF使用自己的交易,或者阻止程序關閉EF的交易?

我發現在這種情況下,沒有添加.SqlQuery命令的附加事務,但是錯誤是由執行過程產生到初始執行的存儲過程中(有點復雜,但它確實是必需的)。 但是我使用.ObjectContext.ExecuteStoreCommand與外部EntityFramework事務有這個問題,但我使用TransactionalBehavior.DoNotEnsureTransaction行為解決了這個問題。

例如:

        using (INotificationDataContext context = DataContextFactory.Create<INotificationDataContext>())
        {
            result = (context as IObjectContextAdapter).ObjectContext.ExecuteStoreCommand(TransactionalBehavior.DoNotEnsureTransaction, sql, parameters);
        }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM