2011-12-23 28 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