using System; using System.Linq.Expressions; using System.Reflection; using Marr.Data; using Marr.Data.Mapping; using NzbDrone.Core.Configuration; using NzbDrone.Core.Datastore.Converters; using NzbDrone.Core.ExternalNotification; using NzbDrone.Core.Indexers; using NzbDrone.Core.Instrumentation; using NzbDrone.Core.Jobs; using NzbDrone.Core.MediaFiles; using NzbDrone.Core.Qualities; using NzbDrone.Core.ReferenceData; using NzbDrone.Core.RootFolders; using NzbDrone.Core.Tv; using BooleanIntConverter = NzbDrone.Core.Datastore.Converters.BooleanIntConverter; using System.Linq; namespace NzbDrone.Core.Datastore { public static class TableMapping { private static readonly FluentMappings Mapper = new FluentMappings(true); public static void Map() { RegisterMappers(); Mapper.Entity().RegisterModel("Config"); Mapper.Entity().RegisterModel("RootFolders").Ignore(r => r.FreeSpace); Mapper.Entity().RegisterModel("IndexerDefinitions"); Mapper.Entity().RegisterModel("NewznabDefinitions"); Mapper.Entity().RegisterModel("JobDefinitions"); Mapper.Entity().RegisterModel("ExternalNotificationDefinitions"); Mapper.Entity().RegisterModel("SceneMappings"); Mapper.Entity().RegisterModel("History") .HasOne(h => h.Episode, h => h.EpisodeId); Mapper.Entity().RegisterModel("Series") .Relationships.AutoMapComplexTypeProperties() .For(c => c.Covers) .LazyLoad((db, series) => db.Query().Where(cover => cover.SeriesId == series.Id).ToList()); Mapper.Entity().RegisterModel("Seasons"); Mapper.Entity().RegisterModel("Episodes"); Mapper.Entity().RegisterModel("EpisodeFiles"); Mapper.Entity().RegisterModel("MediaCovers"); Mapper.Entity().RegisterModel("QualityProfiles").For(q => q.DbAllowed).SetColumnName("Allowed").Ignore(q => q.Allowed); Mapper.Entity().RegisterModel("QualitySizes"); Mapper.Entity().RegisterModel("Logs"); } private static void RegisterMappers() { MapRepository.Instance.RegisterTypeConverter(typeof(Int32), new Int32Converter()); MapRepository.Instance.RegisterTypeConverter(typeof(Boolean), new BooleanIntConverter()); MapRepository.Instance.RegisterTypeConverter(typeof(Enum), new EnumIntConverter()); MapRepository.Instance.RegisterTypeConverter(typeof(QualityModel), new EmbeddedDocumentConverter()); MapRepository.Instance.RegisterTypeConverter(typeof(Quality), new QualityIntConverter()); } } }