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