Friday, 23 September 2016

MVC + Genreic Repository + UOW

enable-migrations -contexttypename schoolcontext
add-migration initialcreate
update-database
install-package PagedList.Mvc
[DatabaseGenerated(DatabaseGeneratedOption.None)] - provided by user - rather generating.
Install-Package SimpleInjector.Integration.Web.Mvc  @Html.ListBox("Categories", (MultiSelectList)ViewBag.Categories , new { @class = "form-control", data_placeholder = "Choose a Category" })

 ViewBag.Categories = new MultiSelectList(db.Categories.ToList(), "Id", "Name");

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script>
<link rel="stylesheet" href="https://ajax.googleapis.com/ajax/libs/jqueryui/1.12.0/themes/smoothness/jquery-ui.css">
<script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.12.0/jquery-ui.min.js"></script>

[DataType(DataType.Date), DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}", ApplyFormatInEditMode =true)]

 $(function(){
            $(".datepickerClass").datepicker({ dateFormat: 'dd/mm/yy' });
        });

IRepository
public interface IRepository<T> where T : class
    {
        // CRUD
        T Add(T entity);
        IEnumerable<T> All();
        IEnumerable<T> FindBy(Expression<Func<T, bool>> predicate);
        void Edit(T entity);
        T Delete(T entity);

    }

Implement IRepository
 public abstract class Repository<T> : IRepository<T> where T : class
    {
        protected DbContext db;
        public Repository(DbContext _db)
        {
            db = _db;
        }
        public virtual T Add(T entity)
        {
            return db.Set<T>().Add(entity);
        }

        public virtual IEnumerable<T> All()
        {
            return db.Set<T>().AsEnumerable();
        }

        public virtual T Delete(T entity)
        {
            return db.Set<T>().Remove(entity);
        }

        public virtual void Edit(T entity)
        {
            db.Entry(entity).State = EntityState.Modified;
        }

        public virtual IEnumerable<T> FindBy(Expression<Func<T, bool>> predicate)
        {
            return db.Set<T>().Where(predicate).AsEnumerable();
        }

    }

IUnitofWork
public interface IUnitofWork : IDisposable
    {
        int commit();

    }
UnitOfWork
 public sealed class UnitofWork : IUnitofWork
    {
        private  DbContext db;
        public UnitofWork(DbContext _db)
        {
            db = _db;
        }
        public int commit()
        {
            return db.SaveChanges();
        }

        public void Dispose()
        {
            if (db != null)
            {
                db.Dispose();
                db = null;
            }
            GC.SuppressFinalize(db);
        }

    }


Injector DI - App Start
https://simpleinjector.readthedocs.io/en/latest/mvcintegration.html
var container = new Container();
            container.Options.DefaultScopedLifestyle = new WebRequestLifestyle();

    // Register your types, for instance:
    container.Register<IUserRepository, SqlUserRepository>(Lifestyle.Scoped);

    // This is an extension method from the integration package.
    container.RegisterMvcControllers(Assembly.GetExecutingAssembly());

    // This is an extension method from the integration package as well.
    container.RegisterMvcIntegratedFilterProvider();

    container.Verify();


    DependencyResolver.SetResolver(new SimpleInjectorDependencyResolver(container));



Bevereages

Types of Beverages Fermented - yeast reacts with sugar to convert into ethyl alcohol & CO2. 4-14% Wine (red, white & rose), Cider ...