2011-12-23 57 views
0

我們有很多使用我們自己的數據對象的遺留代碼。我們正在慢慢嘗試引入EF。我們需要能夠將EF加入到我們已經使用System.Data.SqlClient.SQLTransaction開始的事務中。 EF當然使用System.Transaction.Transaction。這可能嗎?將實體框架列入SQLTransaction?

使事情更清楚。我們的代碼遍佈整個地方,執行以下操作:

public sub DeleteEntity() 
    Dim InTransaction = ado.InTransaction 
    if not InTransaction then ado.BeginTran 
    ... 
     <--want to use EF Here 
    ... 
    if not InTransaction then ado.CommitTran 
end sub 

DeleteEntity例程並不簡單。它有很多邏輯。我想在代碼中間使用EF來代替它,所以我需要將它列入活動事務中。由於它的設計方式,我不能僅僅使用事務範圍。在很多地方都會調用DeleteEntity,我不想訪問每個調用例程的地方。它更需要處理System.Transaction.Transaction和SqlTransaction,然後處理EF本身。

更新:我想:

context.connection.EnlistTransaction(Transaction.Current) 

這是行不通的。

回答

0

我可能是錯的,但你有沒有考慮使用ObjectQuery而不是使用Linq to Entities進行刪除操作。以下是我在MSDN上here

交易的促進發現一個DTC當連接 封閉和單一的事務中重新開放,可能會出現。因爲實體 框架自動打開和關閉連接,所以應該考慮手動打開和關閉連接以避免 事務促進。有關更多信息,請參閱如何:Manually Open the Connection from the Object Context

+0

ObjectQuery不起作用。 DeleteEntity只是一個例子。還有其他功能,我們想用EF來做一小塊。在這個例子中。刪除實體是400行代碼。我只是不是從數據庫中簡單地刪除一個實體。 – coding4fun 2011-12-23 17:52:40