acabo de probar PetaPoco de transacciones de una manera multi-hilo ...Transacción PetaPoco en Multithread Env
Tengo un caso de prueba sencilla:
- valor del objeto simple llamarlo MediaDevice - Insertar una un registro actualizarlo a 1000 veces
void TransactionThread(Object object)
{
Database db = (Database) object;
for(int i= 0; i < 1000;i++)
{
Transaction transaction = db.GetTransaction();
MediaDevice device = new MediaDevice();
device.Name = "Name";
device.Brand = "Brand";
db.Insert(device);
device.Name = "Name_Updated";
device.Brand = "Brand_Updated";
db.Update(device);
transaction.Complete();
}
long count = db.ExecuteScalar<long>("SELECT Count(*) FROM MediaDevices");
Console.WriteLine("Number of all records:" + count);
}
Y esto lo llamo en dos hilos de la siguiente manera: [objeto de base de datos único para ambos hilos]
void TransactionTest()
{
Database db = GetDatabase();
Thread tThread1 = ... // thread for TransactionTest()
Thread tThread2 = ... // thread for TransactionTest()
tThread1.Start(db); // pass Database to TransactionTest()
tThread2.Start(db); // pass same Database to TransactionTest()
}
me sale error nulo o, a veces objeto de error de base de datos dispuesta ..
Pero cuando el suministro de dos instancia de base de datos,
void TransactionTest()
{
Database db = GetDatabase();
Database db2 = GetDatabase();
Thread tThread1 = ... // thread for TransactionTest()
Thread tThread2 = ... // thread for TransactionTest()
tThread1.Start(db); // pass Database instance db to TransactionTest()
tThread2.Start(db2); // pass Database intance db2 to TransactionTest()
}
Todo es OK ...
Bien Cuando compruebo PetaPoco código fuente en la transacción veo que en transaction.Complete
public virtual void Complete()
{
_db.CompleteTransaction();
_db = null;
}
Mi pregunta es que para poder usar la transacción de varios hilos ¿Tengo que usar una nueva copia del objeto de la base de datos? ¿O qué estoy haciendo mal?
Y para que sea seguro para hilos, ¿tengo que abrir y cerrar NUEVA base de datos en cada consulta de actualización de datos?
No recibí excepciones en este estado ... db.ExecuteScalar (...) – Novalis