I use the following function to save changes made to my detached entity objects. I have multiple threads running and I quickly run out of database connections if I don't use the mutex.
Code: Select all
public static void SaveFlashnetChanges(EntityKey ek, EntityObject FlashNetObject)
{
mtx1.WaitOne();
using (Entities ent = new Entities(EntitySharedConnection.SharedConnection))
{
object FNET_ORIG = null;
try
{
if (ent.TryGetObjectByKey(ek, out FNET_ORIG))
{
ent.ApplyPropertyChanges(ek.EntitySetName, FlashNetObject);
}
ent.SaveChanges();
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
mtx1.ReleaseMutex();
}
Code: Select all
Unhandled Exception: System.Data.EntityException: An error occurred while starting a transaction on the provider connection. See the inner exception for details. ---> Devart.Data.Oracle.OracleException: ORA-01453: SET TRANSACTION must be first statement of transaction
at Devart.Data.Oracle.al.b(Int32 A_0)
at Devart.Data.Oracle.an.e(Int32 A_0)
at Devart.Data.Oracle.an.a(Int32 A_0, a1 A_1)
at Devart.Data.Oracle.OracleCommand.a(CommandBehavior A_0, IDisposable A_1, Int32 A_2, Int32 A_3)
at Devart.Common.DbCommandBase.ExecuteDbDataReader(CommandBehavior behavior)
at System.Data.Common.DbCommand.ExecuteReader()
at Devart.Data.Oracle.OracleCommand.ExecuteNonQuery()
at Devart.Data.Oracle.OracleTransaction..ctor(OracleConnection A_0, IsolationLevel A_1)
at Devart.Data.Oracle.OracleConnection.BeginTransaction(IsolationLevel il)
at Devart.Data.Oracle.OracleConnection.b(IsolationLevel A_0)
at System.Data.Common.DbConnection.BeginTransaction(IsolationLevel isolationLevel)
at System.Data.EntityClient.EntityConnection.BeginDbTransaction(IsolationLevel isolationLevel)
--- End of inner exception stack trace ---
at System.Data.EntityClient.EntityConnection.BeginDbTransaction(IsolationLevel isolationLevel)
at System.Data.Common.DbConnection.BeginTransaction()
at System.Data.EntityClient.EntityConnection.BeginTransaction()
at System.Data.Objects.ObjectContext.SaveChanges(Boolean acceptChangesDuringSave)
at System.Data.Objects.ObjectContext.SaveChanges()
at ConsoleApplication1.Program.SubmitNewTasks() in C:\Projects\ConsoleApplication1.EntityData\ConsoleApplication1\Program.cs:line 41
at ConsoleApplication1.Program.Main(String[] args) in C:\Projects\ConsoleApplication1.EntityData\ConsoleApplication1\Program.cs:line 21
Can anyone help?