using System; using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; using adMoto.Payments.Core.Data; using adMoto.Payments.Core.Interfaces; namespace adMoto.Payments.Core { /// /// An implementation of the Repository which uses LINQ to SQL Server to persist its data /// /// The generic type representing the entity we are dealing with /// We use a 1 to 1 mapping of entity -> SQL table public class Repository : IRepository where T : class, IIdentifiable { protected readonly IDataContext DataContext; public Repository(IDataContext dataContext) { DataContext = dataContext; } public int Count() { return DataContext.GetTable().Count(); } public int Count(Expression> expression) { return DataContext.GetTable().Count(expression); } public T FindOne(int id) { return FindOne(t => t.Id == id); } public T FindOne(Expression> expression) { return DataContext.GetTable().Where(expression).SingleOrDefault(); } public bool TryFindOne(Expression> expression, out T entity) { entity = FindOne(expression); return (entity != null); } public bool Exists(Expression> expression) { var entity = FindOne(expression); return (entity != null); } public IList FindAll() { return DataContext.GetTable().ToList(); } public IList FindAll(Expression> expression) { return DataContext.GetTable().Where(expression).ToList(); } public void Insert(T entity) { DataContext.Insert(entity); } public void Delete(T entity) { DataContext.Delete(entity); } public void SubmitChanges() { DataContext.SubmitChanges(); } public IQueryable Find(int id) { return DataContext.GetTable().Where(t => t.Id == id); } public IQueryable Find(Expression> expression) { return DataContext.GetTable().Where(expression); } public IQueryable Find() { return DataContext.GetTable(); } public IQueryable FindInvoiceByNipNumber(string nip, string numer) { return DataContext.FindInvoiceByNipNumber(nip, numer); } public List FindItemsByIdFaktury(int idFaktury) { return DataContext.FindItemsByIdFaktury(idFaktury); } public int GetOrdernumber(string description, int? idfaktury, DateTime? data) { return DataContext.GetOrdernumber(description, idfaktury, data); } } }