using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
namespace UnitOfWorkSample
{
class Program
{
static Random rand = new Random();
static void Main(string[] args)
{
for(int k = 0; k < 10; k++)
{
Thread workerThread = new Thread(DoWork);
workerThread.Start((object)"Thread" + k.ToString());
}
Console.ReadLine();
}
static void DoWork(object oThreadName)
{
string threadName = (string)oThreadName;
IUnitOfWork uow = new UnitOfWorkImp();
IList<string> listIds = new List<string>();
for(int k = 0; k < 100; k++)
{
BOProducts prod = new BOProducts();
prod.CategoryID = 1;
prod.ProductName = "test";
prod.SupplierID = 1;
prod.UnitPrice = 10M;
prod.Discontinued = false;
uow.Create(prod);
uow.Create(new UnitOfWorkForwarder((Action)delegate { listIds.Add("'" + prod.ProductID + "'"); }, null, null));
Console.WriteLine("Thread " + threadName + " created product " + k);
Thread.Sleep(rand.Next(100, 1000));
}
string outErr;
if(!uow.Commit(out outErr))
throw new Exception(outErr);
Console.WriteLine("Thread " + threadName + " committed transaction.");
IList<BOProducts> listProds = new Criteria<BOProducts>()
.Add(Expression.In("ProductID", string.Join(",", listIds.ToArray())))
.List<BOProducts>();
Console.WriteLine("Thread " + threadName + " found " + listProds.Count + " objects committed in db");
uow = new UnitOfWorkImp();
foreach(var prod in listProds)
uow.Delete(prod);
if (!uow.Commit(out outErr))
throw new Exception(outErr);
Console.WriteLine("Thread " + threadName + " deleted all its products successfully");
}
}
}
|