我使用MVC 3与实体拉动成交,现在我已经用下面的一行代码从我的控制器MVC 3:MSDTC事务管理器无法从源头
using (var scope = new TransactionScope())
{
_myRepository.DeleteFM1(id);
_myRepository.DeleteFM2(id, name);
scope.Complete();
}
,并在我的DeleteFM2方法,它发生在实体类来定义我的方法如下:
public void DeleteFM2(int id, string name)
{
var data= _repositoryMD.Fetch().Where(mColl => mColl.Col1 == id);
if (data!= null)
{
//insert here is giving some error MSDTC error !
// here I prepare a message using the '**data**'
_repositoryHistory.Insert(name, message, "FM2", "Delete", dateTime);
_repositoryMD.Attach(data);
_repositoryMD.Delete(data);
_repositoryMD.SaveChanges();
}
}
}
,我有,我已经定义插入方法
一独立的类public bool Insert(string realName, string logMessage, string tableName, string changeType, DateTime dateTime)
{
var history = new History
{
ModifiedBy = realName,
ChangeType = changeType,
DateModified = dateTime,
LogMessage = logMessage,
TableName = tableName
};
_repositoryHistory.Add(history);
_repositoryHistory.SaveChanges();
return true;
}
插入这行代码在上述方法DeleteFM2
_repositoryHistory.Insert(name, message, "FM2", "Delete", dateTime);
我得到这个错误,没有这一行我的代码只是正常后,我在我所有的其他方法,使用该行太即使我在那里我已经使用了交易范围,但我似乎仍然不了解这里的问题。请帮忙。谢谢
底层提供程序在打开时失败。
System.Transactions.TransactionManagerCommunicationException: 与基础事务管理器通信失败。 ---> System.Runtime.InteropServices.COMException:由于通信问题,MSDTC事务 管理器无法从源事务处理管理器中取回事务处理 。可能的原因是:存在防火墙 ,并且它没有MSDTC进程的例外情况,但两台计算机无法通过其NetBIOS名称找到对方,或者对于两个网络事务中的一个网络事务未启用对网络事务的支持 交易经理。 (从HRESULT异常:0x8004D02B)在 System.Transactions.Oletx.IDtcProxyShimFactory.ReceiveTransaction(UInt32的 propgationTokenSize,字节[] propgationToken,IntPtr的managedIdentifier, 的Guid & transactionIdentifier,OletxTransactionIsolationLevel & 的IsolationLevel,ITransactionShim & transactionShim)在 System.Transactions的.TransactionInterop.GetOletxTransactionFromTransmitterPropigationToken(字节[] propagationToken)---内部异常堆栈跟踪的末尾在 System.Transactions.TransactionInterop.GetOletxTransactionFromTransmitterPropigationToken(字节[] propagationToken)在 System.Transactions.TransactionStatePS PEOperation.PSPEPromote(InternalTransaction TX)在 System.Transactions.TransactionStateDelegatedBase.EnterState(InternalTransaction TX)维持在 系统 System.Transactions.EnlistableStates.Promote(InternalTransaction TX) 在System.Transactions.Transaction.Promote()。 Transactions.TransactionInterop.ConvertToOletxTransaction(事务 交易)在 System.Transactions.TransactionInterop.GetExportCookie(事务 交易,字节[]下落)在 System.Data.SqlClient.SqlInternalConnection.GetTransactionCookie(事务 交易,字节[]下落)在 System.Data.SqlClient.SqlInternalConnection.EnlistN onNull(事务 tx)在System.Data.SqlClient.SqlInternalConnection。在在 System.Data.ProviderBase.DbConnectionInternal.ActivateConnection(交易 交易) System.Data.SqlClient.SqlInternalConnectionTds.Activate(交易 交易)争取(交易 TX)在 System.Data.ProviderBase.DbConnectionPool.GetConnection(的DbConnection owningObject)在 System.Data.ProviderBase.DbConnectionFactory.GetConnection(的DbConnection owningConnection)在 System.Data.ProviderBase.DbConnectionClosed.OpenConnection(的DbConnection outerConnection,DbConnectionFactory connectionFactory的)在 System.Data.SqlClient.SqlConnection.Open ()在 System.Data.EntityClient。 EntityConnection.OpenStoreConnectionIf(布尔 openCondition,的DbConnection storeConnectionToOpen,的DbConnection originalConnection,字符串exceptionCode,字符串attemptedOperation, 布尔& closeStoreConnectionOnFailure)
我的防火墙设置
是同一台服务器上的两个存储库的数据库? – 2012-04-27 07:31:34
我已经更新了代码 – Yasser 2012-04-27 07:33:51