[英]EF 6 omit optional parameters when calling a stored procedure using 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.