private void LoadWorkTags(IDbConnection connection, GlobalCache cache)
        {
            var command = GetCommand(connection, "select * from WorkTag;");

            using (var reader = command.ExecuteReader())
            {
                while (reader.Read())
                {
                    var id       = (uint)reader.GetInt64(0);
                    var work     = cache.GetWork((uint)reader.GetInt64(1));
                    var name     = reader.GetString(2);
                    var category = (Category)reader.GetInt32(3);
                    var source   = (Source)reader.GetInt32(4);

                    if (work == null)
                    {
                        continue;
                    }

                    var tag = new Tag(name, category, source);
                    cache.Add(id, work, tag);
                    work.AddTag(tag);
                }
            }
        }
        private void LoadWorkLinks(IDbConnection connection, GlobalCache cache)
        {
            var command = GetCommand(connection, "select * from WorkLink;");

            using (var reader = command.ExecuteReader())
            {
                while (reader.Read())
                {
                    var id           = (uint)reader.GetInt64(0);
                    var work         = cache.GetWork((uint)reader.GetInt64(1));
                    var name         = reader.GetString(2);
                    var relationship = (Relationship)reader.GetInt32(3);
                    var source       = (Source)reader.GetInt32(4);
                    var target       = reader.GetString(5);

                    if (work == null)
                    {
                        continue;
                    }

                    var link = new Link(name, relationship, source, target);
                    cache.Add(id, work, link);
                    work.AddLink(link);
                }
            }
        }
        private void LoadWorks(IDbConnection connection, GlobalCache cache)
        {
            var command = GetCommand(connection, "select * from Work;");

            using (var reader = command.ExecuteReader())
            {
                while (reader.Read())
                {
                    var id     = (uint)reader.GetInt64(0);
                    var type   = (WorkType)reader.GetInt32(1);
                    var parent = cache.GetWork((uint)reader.GetInt64(2));
                    var artist = cache.GetArtist((uint)reader.GetInt64(3));
                    var name   = reader.GetString(4);
                    var year   = reader.GetInt16(5);
                    var number = (uint)reader.GetInt64(6);
                    cache.Add(id, new Work()
                    {
                        Type = type, Parent = parent, Artist = artist, Name = name, Year = year, Number = number
                    });
                }
            }

            LoadWorkLinks(connection, cache);
            LoadWorkTags(connection, cache);
        }
        private void LoadWorkTags(IDbConnection connection, GlobalCache cache)
        {
            var command = GetCommand(connection, "select * from WorkTag;");
            using (var reader = command.ExecuteReader())
            {
                while (reader.Read())
                {
                    var id = (uint)reader.GetInt64(0);
                    var work = cache.GetWork((uint)reader.GetInt64(1));
                    var name = reader.GetString(2);
                    var category = (Category)reader.GetInt32(3);
                    var source = (Source)reader.GetInt32(4);

                    if (work == null)
                        continue;

                    var tag = new Tag(name, category, source);
                    cache.Add(id, work, tag);
                    work.AddTag(tag);
                }
            }
        }
        private void LoadWorkLinks(IDbConnection connection, GlobalCache cache)
        {
            var command = GetCommand(connection, "select * from WorkLink;");
            using (var reader = command.ExecuteReader())
            {
                while (reader.Read())
                {
                    var id = (uint)reader.GetInt64(0);
                    var work = cache.GetWork((uint)reader.GetInt64(1));
                    var name = reader.GetString(2);
                    var relationship = (Relationship)reader.GetInt32(3);
                    var source = (Source)reader.GetInt32(4);
                    var target = reader.GetString(5);

                    if (work == null)
                        continue;

                    var link = new Link(name, relationship, source, target);
                    cache.Add(id, work, link);
                    work.AddLink(link);
                }
            }
        }
        private void LoadWorks(IDbConnection connection, GlobalCache cache)
        {
            var command = GetCommand(connection, "select * from Work;");
            using (var reader = command.ExecuteReader())
            {
                while (reader.Read())
                {
                    var id = (uint)reader.GetInt64(0);
                    var type = (WorkType)reader.GetInt32(1);
                    var parent = cache.GetWork((uint)reader.GetInt64(2));
                    var artist = cache.GetArtist((uint)reader.GetInt64(3));
                    var name = reader.GetString(4);
                    var year = reader.GetInt16(5);
                    var number = (uint)reader.GetInt64(6);
                    cache.Add(id, new Work() { Type = type, Parent = parent, Artist = artist, Name = name, Year = year, Number = number });
                }
            }

            LoadWorkLinks(connection, cache);
            LoadWorkTags(connection, cache);
        }