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();
}
}