Pokušavam da implementiram transakcije u jednom projektu koji se bazira na Entity frameworku i kod ide nešto ovako:
Code:
using (BazaTestEntities ctx = new BazaTestEntities())
{
bool success = false;
using (TransactionScope ts = new TransactionScope())
{
try
{
...
ctx.SaveChanges(false);
...
...
ctx.SaveChanges(false);
.....
....
ctx.SaveChanges(false);
ts.Complete();
success = true;
} // end try
catch(Exception ex)
{
Response.Write(String.Format("{0} <hr /> {1} <hr /> {2} <hr />", ex.Message, ex.InnerException, ex.StackTrace));
} // end catch
} // end transaction
if (success)
{
ctx.AcceptAllChanges();
}
else
{
Response.Write("GRESKA!!!!");
}
} // end context
using (BazaTestEntities ctx = new BazaTestEntities())
{
bool success = false;
using (TransactionScope ts = new TransactionScope())
{
try
{
...
ctx.SaveChanges(false);
...
...
ctx.SaveChanges(false);
.....
....
ctx.SaveChanges(false);
ts.Complete();
success = true;
} // end try
catch(Exception ex)
{
Response.Write(String.Format("{0} <hr /> {1} <hr /> {2} <hr />", ex.Message, ex.InnerException, ex.StackTrace));
} // end catch
} // end transaction
if (success)
{
ctx.AcceptAllChanges();
}
else
{
Response.Write("GRESKA!!!!");
}
} // end context
Uvek dobijam sledeću grešku:
Message:
Citat:
The underlying provider failed on Open.
InnerException:
Citat:
System.Data.SqlClient.SqlException: MSDTC on server 'SUN\678264BF-C7BE-48' is unavailable. at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection) at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection) at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj) at System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj) at System.Data.SqlClient.SqlDataReader.ConsumeMetaData() at System.Data.SqlClient.SqlDataReader.get_MetaData() at System.Data.SqlClient.TdsParser.TdsExecuteTransactionManagerRequest(Byte[] buffer, TransactionManagerRequestType request, String transactionName, TransactionManagerIsolationLevel isoLevel, Int32 timeout, SqlInternalTransaction transaction, TdsParserStateObject stateObj, Boolean isDelegateControlRequest) at System.Data.SqlClient.TdsParser.GetDTCAddress(Int32 timeout, TdsParserStateObject stateObj) at System.Data.SqlClient.SqlInternalConnectionTds.GetDTCAddress() at System.Data.SqlClient.SqlInternalConnection.EnlistNonNull(Transaction tx) at System.Data.SqlClient.SqlInternalConnection.Enlist(Transaction tx) at System.Data.SqlClient.SqlInternalConnectionTds.Activate(Transaction transaction) at System.Data.ProviderBase.DbConnectionInternal.ActivateConnection(Transaction transaction) at System.Data.ProviderBase.DbConnectionPool.GetConnection(DbConnection owningObject) at System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection) at System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory) at System.Data.SqlClient.SqlConnection.Open() at System.Data.EntityClient.EntityConnection.OpenStoreConnectionIf(Boolean openCondition, DbConnection storeConnectionToOpen, DbConnection originalConnection, String exceptionCode, String attemptedOperation, Boolean& closeStoreConnectionOnFailure)
StrackTrace:
Citat:
at System.Data.EntityClient.EntityConnection.OpenStoreConnectionIf(Boolean openCondition, DbConnection storeConnectionToOpen, DbConnection originalConnection, String exceptionCode, String attemptedOperation, Boolean& closeStoreConnectionOnFailure) at System.Data.EntityClient.EntityConnection.Open() at System.Data.Objects.ObjectContext.EnsureConnection() at System.Data.Objects.ObjectContext.SaveChanges(Boolean acceptChangesDuringSave) at Admin.Wizard1_FinishButtonClick(Object sender, WizardNavigationEventArgs e) GRESKA!!!!
Ubih se da provalim u čemu je problem, ali ništa! Baza je SQL Server Express 2005, MDF fajl u okviru app_data foldera.