using System; using System.Collections.Generic; using System.Data.Linq.Mapping; using System.Linq; using System.Linq.Expressions; namespace Dotmyself { /// /// It offers a generic CRUD abstraction for entities. /// Author : Hyacinthe MENIET /// /// /// Entity that a client specifies when it instantiates this class. /// public class DataManager where T : class { private readonly BankingDataContext context; public DataManager(BankingDataContext dc) { context = dc; } public virtual IEnumerable List() => context.GetTable(); public virtual T Get(int id) { MetaTable mapping = context.Mapping.GetTable(typeof(T)); MetaDataMember pkfield = mapping.RowType.DataMembers.SingleOrDefault( d => d.IsPrimaryKey); ParameterExpression param = Expression.Parameter(typeof(T), "e"); var p = Expression.Lambda>( Expression.Equal(Expression.Property(param, pkfield.Name), Expression.Constant(id)), new ParameterExpression[] { param }); return context.GetTable().SingleOrDefault(p); } public virtual void Create(T entity) => context.GetTable().InsertOnSubmit(entity); public virtual void Update(T entity) => context.GetTable().Attach(entity); public virtual void Delete(T entity) => context.GetTable().DeleteOnSubmit(entity); public virtual void Commit() => context.SubmitChanges(); } }