Instantly share code, notes, and snippets.

Embed
What would you like to do?
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Linq;
using Autofac;
using MySample.Data;
using MySample.Data.SampleData;
using MySample.Entities;
using SSW.DataOnion.Core;
using SSW.DataOnion.Core.Initializers;
using SSW.DataOnion.DependencyResolution.Autofac;
using SSW.DataOnion.Interfaces;
namespace MySample.App
{
class Program
{
static void Main(string[] args)
{
var builder = new ContainerBuilder();
var connectionString = ConfigurationManager.ConnectionStrings["MySampleDbConnection"].ConnectionString;
builder.AddDataOnion(
new DbContextConfig(
connectionString,
typeof (MySampleDbContext),
new MigrateToLatestVersion(new SampleDataSeeder())));
builder.RegisterType<BaseRepository<Product, MySampleDbContext>>().As<IRepository<Product>>();
builder.RegisterType<BaseRepository<Order, MySampleDbContext>>().As<IRepository<Order>>();
var container = builder.Build();
using (var scope = container.BeginLifetimeScope())
{
var dbContextScopeFactory = scope.Resolve<IDbContextScopeFactory>();
using (var dbContextScopeRead = dbContextScopeFactory.CreateReadOnly())
{
var dbContextRead = dbContextScopeRead.DbContexts.Get<MySampleDbContext>();
foreach (var product in dbContextRead.Products.ToList())
{
Console.WriteLine(product.Name);
}
}
using (var dbContextScope = dbContextScopeFactory.Create())
{
var dbContext = dbContextScope.DbContexts.Get<MySampleDbContext>();
var firstProduct = dbContext.Products.FirstOrDefault();
dbContext.Orders.Add(
new Order
{
CustomerName = "Test",
OrderDate = DateTime.Now,
LineItems =
new List<OrderLineItem>
{
new OrderLineItem {Price = 20M, Quantity = 2, Product = firstProduct}
}
});
dbContext.SaveChanges();
}
var unitOfWorkFactory = scope.Resolve<IUnitOfWorkFactory>();
using (var unitOfWork = unitOfWorkFactory.Create())
{
var productRepository = unitOfWork.Repository<Product>();
var orderRepository = unitOfWork.Repository<Order>();
var firstProduct = productRepository.Get().FirstOrDefault();
orderRepository.Add(
new Order
{
CustomerName = "Test",
OrderDate = DateTime.Now,
LineItems =
new List<OrderLineItem>
{
new OrderLineItem {Price = 20M, Quantity = 2, Product = firstProduct}
}
});
unitOfWork.SaveChanges();
}
}
Console.ReadLine();
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment