using System.Collections.Generic; using System.Linq; namespace NzbDrone.Core.Datastore { public interface IBasicRepository { IEnumerable All(); TModel Get(int id); TModel Insert(TModel model); TModel Update(TModel model); TModel Upsert(TModel model); void Delete(int id); IList InsertMany(IList model); IList UpdateMany(IList model); } public class BasicRepository : IBasicRepository where TModel : ModelBase, new() { public BasicRepository(IObjectDatabase objectDatabase) { ObjectDatabase = objectDatabase; } public IObjectDatabase ObjectDatabase { get; private set; } protected IEnumerable Queryable { get { return ObjectDatabase.AsQueryable(); } } public IEnumerable All() { return Queryable.ToList(); } public TModel Get(int id) { return Queryable.Single(c => c.OID == id); } public TModel Insert(TModel model) { return ObjectDatabase.Insert(model); } public TModel Update(TModel model) { return ObjectDatabase.Update(model); } public IList InsertMany(IList model) { return ObjectDatabase.InsertMany(model); } public IList UpdateMany(IList model) { return ObjectDatabase.UpdateMany(model); } public TModel Upsert(TModel model) { if(model.OID == 0) { return ObjectDatabase.Insert(model); } return ObjectDatabase.Update(model); } public void Delete(int id) { var itemToDelete = Get(id); ObjectDatabase.Delete(itemToDelete); } } }