using System; using System.Collections; using System.Collections.Generic; using System.Linq; using System.Reflection; using Eloquera.Client; namespace NzbDrone.Core.Datastore { public class EloqueraDb : IDisposable { private readonly IdService _idService; public DB Db { get; private set; } public EloqueraDb(DB db, IdService idService) { _idService = idService; Db = db; } public IEnumerable AsQueryable() { return Db.Query(); } public T Insert(T obj) where T : BaseRepositoryModel { if (obj.Id != 0) { throw new InvalidOperationException("Attempted to insert object with existing ID as new object"); } _idService.EnsureIds(obj, new HashSet()); Db.Store(obj); return obj; } public T Update(T obj) where T : BaseRepositoryModel { if (obj.Id == 0) { throw new InvalidOperationException("Attempted to update object without ID"); } _idService.EnsureIds(obj, new HashSet()); Db.Store(obj); return obj; } public IList InsertMany(IList objects) where T : BaseRepositoryModel { _idService.EnsureIds(objects, new HashSet()); return DoMany(objects, Insert); } public IList UpdateMany(IList objects) where T : BaseRepositoryModel { _idService.EnsureIds(objects, new HashSet()); return DoMany(objects, Update); } public void Delete(T obj) where T : BaseRepositoryModel { if (obj.Id == 0) { throw new InvalidOperationException("Attempted to delete an object without an ID"); } Db.Delete(obj); } public void DeleteMany(IEnumerable objects) where T : BaseRepositoryModel { foreach (var o in objects) { Delete(o); } } private IList DoMany(IEnumerable objects, Func function) where T : BaseRepositoryModel { return objects.Select(function).ToList(); } public void Dispose() { Db.Dispose(); } } }