For questions and support please contact Le on Twitter @LeLong37
![quickstart quickstart]()
Additional References
v2.0
http://blog.longle.net/2013/10/09/upgrading-to-async-with-entity-framework-mvc-odata-asyncentitysetcontroller-kendo-ui-glimpse-generic-unit-of-work-repository-framework-v2-0
v1.0
http://blog.longle.net/2013/05/11/genericizing-the-unit-of-work-pattern-repository-pattern-with-entity-framework-in-mvc
Quick Samples with LINQPad
*Initializing of UnitofWork and Repositories would be facilitated by DI & IoC in real world implementation.
Simple query for all categories
Simple query, with clause and sorting
Simple query with deep loading graph and projection
Accessing repositories from UnitOfWork, with async (EF6 only)
(obviously this would be injected in real world implementation)
Built in transaction handling in UnitOfWork
Async hybrid deletes

Additional References
v2.0
http://blog.longle.net/2013/10/09/upgrading-to-async-with-entity-framework-mvc-odata-asyncentitysetcontroller-kendo-ui-glimpse-generic-unit-of-work-repository-framework-v2-0
v1.0
http://blog.longle.net/2013/05/11/genericizing-the-unit-of-work-pattern-repository-pattern-with-entity-framework-in-mvc
Quick Samples with LINQPad
*Initializing of UnitofWork and Repositories would be facilitated by DI & IoC in real world implementation.
Simple query for all categories
// Initialize a repository (obviously this would be injected in real world implementation)var categoryRepository = new Repository<Category>(this); var categories1 = categoryRepository .Query() .Select(); categories1.Dump();
Simple query, with clause and sorting
var categories2 = categoryRepository
.Query(c => c.CategoryID < 5)
.OrderBy(x => x.OrderBy(y => y.CategoryName)
.ThenBy(w => w.CategoryID))
.Select();
categories2.Dump();
Simple query with deep loading graph and projection
var categories = categoryRepository .Query(x => x.CategoryName == "Produce") .Include(x => x.Products.Select(p => p.Supplier)) .Include(x => x.Products.Select(p => p.OrderDetails)) .Select(x => new { CategoryId = x.CategoryID, ProductCount = x.Products.Count(), ItemsSold = x.Products.SelectMany(p => p.OrderDetails).Sum(p => p.Quantity) }); categories.Dump();
Accessing repositories from UnitOfWork, with async (EF6 only)
(obviously this would be injected in real world implementation)
IUnitOfWorkAsync unitOfWork = new UnitOfWork(this); var product1 = await unitOfWork.RepositoryAsync<Product>().FindAsync(2); product1.Dump();
Built in transaction handling in UnitOfWork
var productRepository = new Repository<Product>(this); var product2 = await productRepository.FindAsync(7); product2.Dump(); // Begin transaction unitOfWork.BeginTransaction(); try{ product2.ProductName = "Chai4"; product2.ObjectState = ObjectState.Modified; // <Do other transactions here> productRepository.Update(product2); var changes = await unitOfWork.SaveChangesAsync(); changes.Dump("changes"); // Commit Transaction unitOfWork.Commit(); } catch{ // Rollback transaction unitOfWork.Rollback(); } product2 = await productRepository.FindAsync(7); product2.Dump();
Async hybrid deletes
var isDeleted = await productRepository.DeleteAsync(2);