我正在研究通過IOC從第三方數據驅動程序加載的插件。插件和數據驅動程序都在相同的SQL Server 2005數據庫上運行,但該插件專注於與數據驅動程序管理的表具有外鍵關係的一小部分表。如何在SqlTransaction中的實體框架3.5中執行更新
我的問題是,在某些操作中,數據驅動程序正在創建一個圍繞調用我的插件的SQLTransaction,這導致我的操作失敗(超時異常)。一個典型的場景如下的僞碼/代碼路徑:
DataDriver.InsertEntity(IBusinessObject businessObject)
{
CreateSqlTransaction();
AddEntityToEntityTable(businessObject);
Plugin.PersistAdditionalData(businessObject);
CommitOrRollbackTransaction();
}
在我的插件,我在做這樣的事情:
Plugin.PersistAdditionalData(IBusinessObject businessObject)
{
var dbObject = GetObjectFromDatabase(businessObject); // Via Entity Framework
var additionalData = CreateAdditionalDataObject(businessObject);
// Insert data to a table with a foreign key relationship to a table that the
// data driver has just inserted the business object data to in the current
// transaction.
_entityModel.AddToObject_AdditionalData_AssociationSet(additionalData);
_entityModel.SaveChanges();
}
我已經試過包裝我的方法在使用( TransactionScope){...}塊,但一直沒有能夠得到這個工作。它確實將失敗從讀取(GetObjectFromDatabase)移動到保存。
我無權訪問數據驅動程序代碼或任何有關事務已提交或回滾的通知。如果我知道要建議什麼,我可能有可能讓開發人員進行一些更改,但我更喜歡不需要這樣的解決方案。
這些都是正確的,但不幸的是我不能使用你的任何建議,因爲他們需要修改調用數據驅動程序。 – Todd 2010-10-13 19:32:29