我使用MVC 3的实体,现在我已经用下面的代码行从我的控制器
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();
}
}
}
我有其中I所定义的插入方法作为一个单独的类
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.TransactionStatePSPEOperation.PSPEPromote(InternalTransaction TX)在System.Transactions.TransactionStateDelegatedBase.EnterState(InternalTransaction TX)在System.Transactions.EnlistableStates.Promote(InternalTransaction TX)在System.Transactions.Transaction.Promote()在System.Transactions.TransactionInterop.ConvertToOletxTransaction(事务的事务)在System.Transactions.TransactionInte rop.GetExportCookie(事务的事务,字节[]下落)在System.Data.SqlClient.SqlInternalConnection.GetTransactionCookie(事务的事务,字节[]下落)在System.Data.SqlClient.SqlInternalConnection.EnlistNonNull(事务TX)在System.Data。 SqlClient.SqlInternalConnection.Enlist(交易TX)在System.Data.SqlClient.SqlInternalConnectionTds.Activate(交易成交)在System.Data.ProviderBase.DbConnectionInternal.ActivateConnection(交易成交)在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,ORI的DbConnection ginalConnection,字符串exceptionCode,字符串attemptedOperation,布尔逻辑closeStoreConnectionOnFailure)
我的防火墙设置