一. 前言
日前在撰寫 C# + Database First Entity Framework 6.x 程式時, 先呼叫 SP (該 SP 會異動資料庫), 再利用 EF 寫入其它的異動資料; 但在 SaveChanges() 時, 發生例外, 卻發現原來以 SP 異動的資料並未還原 (rollback). 覺得很怪, 於是寫了一支主控台程式, 以探究原因.
註: 為避免文章過於冗長, 本文以 SP 代表 Stored Procedure, EF 代表 Entity Framework. Tx 代表 Transacton
程式邏輯大致如下, 建議下載 github 上分享的原始程式, 實際執行看看.
using (xxEntities ctx = new xxEntities()) { //1.. 呼叫 SP, 並取回值 ObjectParameter orderno = new ObjectParameter("po_order_no", typeof(String)); ctx.usp_get_order_no(orderno); //2.. 新增資料, 以 EF 寫入 //... ctx.SaveChanges(); }