tôi chỉ kiểm tra PetaPoco giao dịch một cách multithread ...PetaPoco giao dịch trong thời nhiều Env
Tôi có một trường hợp thử nghiệm đơn giản:
- đối tượng giá trị đơn giản gọi nó là MediaDevice - Chèn một một kỷ lục cập nhật nó cho 1000 lần
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);
}
Và tôi gọi đây là hai chủ đề như thế này: [Độc Cơ sở dữ liệu đối tượng cho cả chủ đề]
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()
}
tôi nhận được lỗi Null hoặc đôi khi Object lỗi thanh lý khoản cho cơ sở dữ liệu ..
Nhưng khi tôi cung cấp hai ví dụ cơ sở dữ liệu,
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()
}
everthing là OK ...
Vâng Khi tôi kiểm tra PetaPoco mã nguồn tại giao dịch tôi thấy rằng tại transaction.Complete
public virtual void Complete()
{
_db.CompleteTransaction();
_db = null;
}
Câu hỏi của tôi là để có thể sử dụng giao dịch từ nhiều chủ đề Tôi có phải sử dụng bản sao mới của đối tượng Cơ sở dữ liệu không? Hay tôi đang làm gì sai?
Và để làm cho chuỗi này an toàn, tôi có phải mở và đóng cơ sở dữ liệu MỚI ở mọi truy vấn cập nhật dữ liệu không?
Tôi không nhận được ngoại lệ tại tuyên bố này ... db.ExecuteScalar (...) – Novalis