Starting to use Lazy loading

This commit is contained in:
Zoe Roux 2020-02-10 02:12:03 +01:00
parent 46cfd6f3c7
commit cbc10acf54
6 changed files with 35 additions and 13 deletions

View File

@ -25,7 +25,7 @@ namespace Kyoo.Models
[JsonIgnore] public string ImgPrimary { get; set; } [JsonIgnore] public string ImgPrimary { get; set; }
public string ExternalIDs { get; set; } public string ExternalIDs { get; set; }
public IEnumerable<Track> Tracks { get; set; } public virtual IEnumerable<Track> Tracks { get; set; }
public string ShowTitle; //Used in the API response only public string ShowTitle; //Used in the API response only
public string Link; //Used in the API response only public string Link; //Used in the API response only
@ -73,6 +73,13 @@ namespace Kyoo.Models
return showSlug + "-s" + seasonNumber + "e" + episodeNumber; return showSlug + "-s" + seasonNumber + "e" + episodeNumber;
} }
public Episode SetLink(string showSlug)
{
Link = GetSlug(showSlug, SeasonNumber, EpisodeNumber);
Thumb = "thumb/" + Link;
return this;
}
public Episode Merge(Episode other) public Episode Merge(Episode other)
{ {
if (other == null) if (other == null)

View File

@ -0,0 +1,13 @@
namespace Kyoo.Models
{
public class GenreLink
{
// TODO Make json serializer ignore this class and only serialize the Genre child.
// TODO include this class in the EF workflows.
public long ShowID { get; set; }
public virtual Show Show { get; set; }
public long GenreID { get; set; }
public virtual Genre Genre { get; set; }
}
}

View File

@ -6,9 +6,9 @@ namespace Kyoo.Models
{ {
[JsonIgnore] public long ID { get; set; } [JsonIgnore] public long ID { get; set; }
[JsonIgnore] public long PeopleID { get; set; } [JsonIgnore] public long PeopleID { get; set; }
public People People { get; set; } public virtual People People { get; set; }
[JsonIgnore] public long ShowID { get; set; } [JsonIgnore] public long ShowID { get; set; }
[JsonIgnore] public Show Show { get; set; } [JsonIgnore] public virtual Show Show { get; set; }
public string Role { get; set; } public string Role { get; set; }
public string Type { get; set; } public string Type { get; set; }

View File

@ -77,12 +77,12 @@ namespace Kyoo.Controllers
public Show GetShowBySlug(string slug) public Show GetShowBySlug(string slug)
{ {
Show ret = (from show in _database.Shows where show.Slug == slug select show).FirstOrDefault(); Show ret = (from show in _database.Shows where show.Slug == slug select show).FirstOrDefault();
if (ret == null) // if (ret == null)
return null; // return null;
//_database.Entry(ret).Collection(x => x.Genres).Load(); //_database.Entry(ret).Collection(x => x.Genres).Load();
_database.Entry(ret).Reference(x => x.Studio).Load(); // _database.Entry(ret).Reference(x => x.Studio).Load();
_database.Entry(ret).Collection(x => x.People).Load(); // _database.Entry(ret).Collection(x => x.People).Load();
_database.Entry(ret).Collection(x => x.Seasons).Load(); // _database.Entry(ret).Collection(x => x.Seasons).Load();
return ret; return ret;
} }
@ -114,26 +114,26 @@ namespace Kyoo.Controllers
public IEnumerable<Episode> GetEpisodes(string showSlug) public IEnumerable<Episode> GetEpisodes(string showSlug)
{ {
return from episode in _database.Episodes where episode.Show.Slug == showSlug select episode; return from episode in _database.Episodes where episode.Show.Slug == showSlug select episode.SetLink(showSlug);
} }
public IEnumerable<Episode> GetEpisodes(string showSlug, long seasonNumber) public IEnumerable<Episode> GetEpisodes(string showSlug, long seasonNumber)
{ {
return from episode in _database.Episodes where episode.SeasonNumber == seasonNumber return from episode in _database.Episodes where episode.SeasonNumber == seasonNumber
&& episode.Show.Slug == showSlug select episode; && episode.Show.Slug == showSlug select episode.SetLink(showSlug);
} }
public IEnumerable<Episode> GetEpisodes(long showID, long seasonNumber) public IEnumerable<Episode> GetEpisodes(long showID, long seasonNumber)
{ {
return from episode in _database.Episodes where episode.ShowID == showID return from episode in _database.Episodes where episode.ShowID == showID
&& episode.SeasonNumber == seasonNumber select episode; && episode.SeasonNumber == seasonNumber select episode.SetLink(episode.Show.Slug);
} }
public Episode GetEpisode(string showSlug, long seasonNumber, long episodeNumber) public Episode GetEpisode(string showSlug, long seasonNumber, long episodeNumber)
{ {
return (from episode in _database.Episodes where episode.EpisodeNumber == episodeNumber return (from episode in _database.Episodes where episode.EpisodeNumber == episodeNumber
&& episode.SeasonNumber == seasonNumber && episode.SeasonNumber == seasonNumber
&& episode.Show.Slug == showSlug select episode).FirstOrDefault(); && episode.Show.Slug == showSlug select episode.SetLink(showSlug)).FirstOrDefault();
} }
public WatchItem GetWatchItem(string showSlug, long seasonNumber, long episodeNumber, bool complete = true) public WatchItem GetWatchItem(string showSlug, long seasonNumber, long episodeNumber, bool complete = true)

View File

@ -30,6 +30,7 @@
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets> <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
<PrivateAssets>all</PrivateAssets> <PrivateAssets>all</PrivateAssets>
</PackageReference> </PackageReference>
<PackageReference Include="Microsoft.EntityFrameworkCore.Proxies" Version="3.1.1" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Relational" Version="3.1.1" /> <PackageReference Include="Microsoft.EntityFrameworkCore.Relational" Version="3.1.1" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="3.1.1" /> <PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="3.1.1" />
<PackageReference Include="Newtonsoft.Json" Version="12.0.3" /> <PackageReference Include="Newtonsoft.Json" Version="12.0.3" />

View File

@ -33,7 +33,8 @@ namespace Kyoo
services.AddControllers().AddNewtonsoftJson(); services.AddControllers().AddNewtonsoftJson();
services.AddHttpClient(); services.AddHttpClient();
services.AddDbContext<DatabaseContext>(options => options.UseSqlite(Configuration.GetConnectionString("Database"))); services.AddDbContext<DatabaseContext>(options => options.UseLazyLoadingProxies()
.UseSqlite(Configuration.GetConnectionString("Database")));
// services.AddIdentity<ApplicationUser, IdentityRole>() // services.AddIdentity<ApplicationUser, IdentityRole>()
// .AddEntityFrameworkStores() // .AddEntityFrameworkStores()