internal int Update <T>(T item, ISqlLiteDataObjectCrud <T> crud) where T : class, ISqlLiteDataObject
        {
            lock (Locker)
            {
                int r;
                if (item.Id != 0)
                {
                    Connection = new SqliteConnection("Data Source=" + Path);
                    Connection.Open();
                    using (var command = Connection.CreateCommand())
                    {
                        crud.Update(item, command);
                        r = command.ExecuteNonQuery();
                    }
                    Connection.Close();
                    return(r);
                }

                Connection = new SqliteConnection("Data Source=" + Path);
                Connection.Open();
                using (var command = Connection.CreateCommand())
                {
                    crud.Insert(item, command);
                    r = command.ExecuteNonQuery();
                }
                Connection.Close();
                return(r);
            }
        }
 internal int Delete <T>(int id, ISqlLiteDataObjectCrud <T> crud) where T : class, ISqlLiteDataObject
 {
     lock (Locker)
     {
         int r;
         Connection = new SqliteConnection("Data Source=" + Path);
         Connection.Open();
         using (var command = Connection.CreateCommand())
         {
             crud.Delete(id, command);
             r = command.ExecuteNonQuery();
         }
         Connection.Close();
         return(r);
     }
 }
        internal IEnumerable <T> GetAll <T>(ISqlLiteDataObjectCrud <T> crud) where T : class, ISqlLiteDataObject
        {
            var tl = new List <T>();

            lock (Locker)
            {
                Connection = new SqliteConnection("Data Source=" + Path);
                Connection.Open();
                using (var contents = Connection.CreateCommand())
                {
                    contents.CommandText = crud.ReadAll();
                    var r = contents.ExecuteReader();
                    while (r.Read())
                    {
                        tl.Add(crud.FromReader(r));
                    }
                }
                Connection.Close();
            }
            return(tl);
        }
 internal T Get <T>(int id, ISqlLiteDataObjectCrud <T> crud) where T : class, ISqlLiteDataObject
 {
     lock (Locker)
     {
         Connection = new SqliteConnection("Data Source=" + Path);
         Connection.Open();
         using (var command = Connection.CreateCommand())
         {
             command.CommandText = crud.Read();
             command.Parameters.Add(new SqliteParameter(DbType.Int32)
             {
                 Value = id
             });
             var r = command.ExecuteReader();
             while (r.Read())
             {
                 var thing = crud.FromReader(r);
                 return(thing);
             }
         }
         Connection.Close();
     }
     return(null);
 }
 internal new int Delete <T>(int id, ISqlLiteDataObjectCrud <T> crud) where T : MyReproSqlLiteObject
 {
     return(Singleton.Db.Delete(id, crud));
 }
 internal new IEnumerable <T> GetAll <T>(ISqlLiteDataObjectCrud <T> crud) where T : MyReproSqlLiteObject
 {
     return(Singleton.Db.GetAll(crud));
 }
 internal new int Save <T>(T item, ISqlLiteDataObjectCrud <T> crud) where T : MyReproSqlLiteObject
 {
     return(Singleton.Db.Update(item, crud));
 }
 internal new ISqlLiteDataObject Get <T>(int id, ISqlLiteDataObjectCrud <T> crud) where T : MyReproSqlLiteObject
 {
     return(Singleton.Db.Get(id, crud));
 }
 internal virtual int Delete <T>(int id, ISqlLiteDataObjectCrud <T> crud) where T : class, ISqlLiteDataObject
 {
     return(Db.Delete(id, crud));
 }
 internal virtual int Save <T>(T item, ISqlLiteDataObjectCrud <T> crud) where T : class, ISqlLiteDataObject
 {
     return(Db.Update(item, crud));
 }
 internal virtual IEnumerable <T> GetAll <T>(ISqlLiteDataObjectCrud <T> crud) where T : class, ISqlLiteDataObject
 {
     return(Db.GetAll(crud));
 }
 internal virtual ISqlLiteDataObject Get <T>(int id, ISqlLiteDataObjectCrud <T> crud) where T : class, ISqlLiteDataObject
 {
     return(Db.Get(id, crud));
 }