EF使用ExecuteSqlCommand(db.Database.ExecuteSqlCommand("exec proc_DeleteCaseInfo_Output @caseID", new SqlParameter("@caseID", caseID));)來執行了一個包含了事務的存儲過程,結果一直提示如題錯誤,找了很多文章也沒有解決,不過有一篇文章給我了一些啟發,參見:http://blog.csdn.net/tuzhen007/article/details/11183961,從此文中可知,如題錯誤是因為重復嵌套使用了事務,那么肯定是ExecuteSqlCommand函數調用了事務,通過瀏覽對象,見下圖:
可知該函數還有一些重載(因為沒有引用相關dll,該重載並沒有提示出來,哭死),該參數有兩個枚舉,EnsureTransaction——如果不存在任何事務,則使用新事務進行操作;DoNotEnsureTransaction——如果存在現有事務,則使用它,否則在沒有事務的情況下執行命令或查詢。果然如此,該函數默認的調用了事務(原諒我的無知,高手請勿拍磚。。。。)。
問題找到了,解決思路也就有了,其一:使用該函數的事務,取消存儲過程中的事務;其二:或者禁止該函數啟用事務,在存儲過程中使用事務。總之事務調用不要重復就好。折騰了大半天,總算解決了。