Upgrade (again) to EF Core 3.0
This commit is contained in:
parent
1e57607a7d
commit
b0fec23a51
@ -12,13 +12,13 @@
|
|||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="2.2.6">
|
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="3.0.0">
|
||||||
<PrivateAssets>all</PrivateAssets>
|
<PrivateAssets>all</PrivateAssets>
|
||||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||||
</PackageReference>
|
</PackageReference>
|
||||||
<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="2.2.6" />
|
<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="3.0.0" />
|
||||||
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="2.2.6" />
|
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="3.0.0" />
|
||||||
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="2.2.6">
|
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="3.0.0">
|
||||||
<PrivateAssets>all</PrivateAssets>
|
<PrivateAssets>all</PrivateAssets>
|
||||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||||
</PackageReference>
|
</PackageReference>
|
||||||
|
|||||||
@ -10,14 +10,14 @@ using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
|
|||||||
namespace DataLayer.Migrations
|
namespace DataLayer.Migrations
|
||||||
{
|
{
|
||||||
[DbContext(typeof(LibationContext))]
|
[DbContext(typeof(LibationContext))]
|
||||||
[Migration("20190124192324_EmptyCategorySeed")]
|
[Migration("20191007202808_UpgradeToCore3")]
|
||||||
partial class EmptyCategorySeed
|
partial class UpgradeToCore3
|
||||||
{
|
{
|
||||||
protected override void BuildTargetModel(ModelBuilder modelBuilder)
|
protected override void BuildTargetModel(ModelBuilder modelBuilder)
|
||||||
{
|
{
|
||||||
#pragma warning disable 612, 618
|
#pragma warning disable 612, 618
|
||||||
modelBuilder
|
modelBuilder
|
||||||
.HasAnnotation("ProductVersion", "2.2.0-rtm-35687")
|
.HasAnnotation("ProductVersion", "3.0.0")
|
||||||
.HasAnnotation("Relational:MaxIdentifierLength", 128)
|
.HasAnnotation("Relational:MaxIdentifierLength", 128)
|
||||||
.HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);
|
.HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);
|
||||||
|
|
||||||
@ -25,27 +25,35 @@ namespace DataLayer.Migrations
|
|||||||
{
|
{
|
||||||
b.Property<int>("BookId")
|
b.Property<int>("BookId")
|
||||||
.ValueGeneratedOnAdd()
|
.ValueGeneratedOnAdd()
|
||||||
|
.HasColumnType("int")
|
||||||
.HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);
|
.HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);
|
||||||
|
|
||||||
b.Property<string>("AudibleProductId");
|
b.Property<string>("AudibleProductId")
|
||||||
|
.HasColumnType("nvarchar(450)");
|
||||||
|
|
||||||
b.Property<int>("CategoryId");
|
b.Property<int>("CategoryId")
|
||||||
|
.HasColumnType("int");
|
||||||
|
|
||||||
b.Property<DateTime?>("DatePublished");
|
b.Property<DateTime?>("DatePublished")
|
||||||
|
.HasColumnType("datetime2");
|
||||||
|
|
||||||
b.Property<string>("Description");
|
b.Property<string>("Description")
|
||||||
|
.HasColumnType("nvarchar(max)");
|
||||||
|
|
||||||
b.Property<bool>("HasBookDetails");
|
b.Property<bool>("HasBookDetails")
|
||||||
|
.HasColumnType("bit");
|
||||||
|
|
||||||
b.Property<bool>("IsAbridged");
|
b.Property<bool>("IsAbridged")
|
||||||
|
.HasColumnType("bit");
|
||||||
|
|
||||||
b.Property<int>("LengthInMinutes");
|
b.Property<int>("LengthInMinutes")
|
||||||
|
.HasColumnType("int");
|
||||||
|
|
||||||
b.Property<string>("PictureId");
|
b.Property<string>("PictureId")
|
||||||
|
.HasColumnType("nvarchar(max)");
|
||||||
|
|
||||||
b.Property<string>("Publisher");
|
b.Property<string>("Title")
|
||||||
|
.HasColumnType("nvarchar(max)");
|
||||||
b.Property<string>("Title");
|
|
||||||
|
|
||||||
b.HasKey("BookId");
|
b.HasKey("BookId");
|
||||||
|
|
||||||
@ -58,13 +66,17 @@ namespace DataLayer.Migrations
|
|||||||
|
|
||||||
modelBuilder.Entity("DataLayer.BookContributor", b =>
|
modelBuilder.Entity("DataLayer.BookContributor", b =>
|
||||||
{
|
{
|
||||||
b.Property<int>("BookId");
|
b.Property<int>("BookId")
|
||||||
|
.HasColumnType("int");
|
||||||
|
|
||||||
b.Property<int>("ContributorId");
|
b.Property<int>("ContributorId")
|
||||||
|
.HasColumnType("int");
|
||||||
|
|
||||||
b.Property<int>("Role");
|
b.Property<int>("Role")
|
||||||
|
.HasColumnType("int");
|
||||||
|
|
||||||
b.Property<byte>("Order");
|
b.Property<byte>("Order")
|
||||||
|
.HasColumnType("tinyint");
|
||||||
|
|
||||||
b.HasKey("BookId", "ContributorId", "Role");
|
b.HasKey("BookId", "ContributorId", "Role");
|
||||||
|
|
||||||
@ -79,13 +91,17 @@ namespace DataLayer.Migrations
|
|||||||
{
|
{
|
||||||
b.Property<int>("CategoryId")
|
b.Property<int>("CategoryId")
|
||||||
.ValueGeneratedOnAdd()
|
.ValueGeneratedOnAdd()
|
||||||
|
.HasColumnType("int")
|
||||||
.HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);
|
.HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);
|
||||||
|
|
||||||
b.Property<string>("AudibleCategoryId");
|
b.Property<string>("AudibleCategoryId")
|
||||||
|
.HasColumnType("nvarchar(450)");
|
||||||
|
|
||||||
b.Property<string>("Name");
|
b.Property<string>("Name")
|
||||||
|
.HasColumnType("nvarchar(max)");
|
||||||
|
|
||||||
b.Property<int?>("ParentCategoryCategoryId");
|
b.Property<int?>("ParentCategoryCategoryId")
|
||||||
|
.HasColumnType("int");
|
||||||
|
|
||||||
b.HasKey("CategoryId");
|
b.HasKey("CategoryId");
|
||||||
|
|
||||||
@ -108,11 +124,14 @@ namespace DataLayer.Migrations
|
|||||||
{
|
{
|
||||||
b.Property<int>("ContributorId")
|
b.Property<int>("ContributorId")
|
||||||
.ValueGeneratedOnAdd()
|
.ValueGeneratedOnAdd()
|
||||||
|
.HasColumnType("int")
|
||||||
.HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);
|
.HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);
|
||||||
|
|
||||||
b.Property<string>("AudibleAuthorId");
|
b.Property<string>("AudibleAuthorId")
|
||||||
|
.HasColumnType("nvarchar(max)");
|
||||||
|
|
||||||
b.Property<string>("Name");
|
b.Property<string>("Name")
|
||||||
|
.HasColumnType("nvarchar(450)");
|
||||||
|
|
||||||
b.HasKey("ContributorId");
|
b.HasKey("ContributorId");
|
||||||
|
|
||||||
@ -123,11 +142,14 @@ namespace DataLayer.Migrations
|
|||||||
|
|
||||||
modelBuilder.Entity("DataLayer.LibraryBook", b =>
|
modelBuilder.Entity("DataLayer.LibraryBook", b =>
|
||||||
{
|
{
|
||||||
b.Property<int>("BookId");
|
b.Property<int>("BookId")
|
||||||
|
.HasColumnType("int");
|
||||||
|
|
||||||
b.Property<DateTime>("DateAdded");
|
b.Property<DateTime>("DateAdded")
|
||||||
|
.HasColumnType("datetime2");
|
||||||
|
|
||||||
b.Property<string>("DownloadBookLink");
|
b.Property<string>("DownloadBookLink")
|
||||||
|
.HasColumnType("nvarchar(max)");
|
||||||
|
|
||||||
b.HasKey("BookId");
|
b.HasKey("BookId");
|
||||||
|
|
||||||
@ -138,11 +160,14 @@ namespace DataLayer.Migrations
|
|||||||
{
|
{
|
||||||
b.Property<int>("SeriesId")
|
b.Property<int>("SeriesId")
|
||||||
.ValueGeneratedOnAdd()
|
.ValueGeneratedOnAdd()
|
||||||
|
.HasColumnType("int")
|
||||||
.HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);
|
.HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);
|
||||||
|
|
||||||
b.Property<string>("AudibleSeriesId");
|
b.Property<string>("AudibleSeriesId")
|
||||||
|
.HasColumnType("nvarchar(450)");
|
||||||
|
|
||||||
b.Property<string>("Name");
|
b.Property<string>("Name")
|
||||||
|
.HasColumnType("nvarchar(max)");
|
||||||
|
|
||||||
b.HasKey("SeriesId");
|
b.HasKey("SeriesId");
|
||||||
|
|
||||||
@ -153,11 +178,14 @@ namespace DataLayer.Migrations
|
|||||||
|
|
||||||
modelBuilder.Entity("DataLayer.SeriesBook", b =>
|
modelBuilder.Entity("DataLayer.SeriesBook", b =>
|
||||||
{
|
{
|
||||||
b.Property<int>("SeriesId");
|
b.Property<int>("SeriesId")
|
||||||
|
.HasColumnType("int");
|
||||||
|
|
||||||
b.Property<int>("BookId");
|
b.Property<int>("BookId")
|
||||||
|
.HasColumnType("int");
|
||||||
|
|
||||||
b.Property<float?>("Index");
|
b.Property<float?>("Index")
|
||||||
|
.HasColumnType("real");
|
||||||
|
|
||||||
b.HasKey("SeriesId", "BookId");
|
b.HasKey("SeriesId", "BookId");
|
||||||
|
|
||||||
@ -173,17 +201,45 @@ namespace DataLayer.Migrations
|
|||||||
b.HasOne("DataLayer.Category", "Category")
|
b.HasOne("DataLayer.Category", "Category")
|
||||||
.WithMany()
|
.WithMany()
|
||||||
.HasForeignKey("CategoryId")
|
.HasForeignKey("CategoryId")
|
||||||
.OnDelete(DeleteBehavior.Cascade);
|
.OnDelete(DeleteBehavior.Cascade)
|
||||||
|
.IsRequired();
|
||||||
|
|
||||||
|
b.OwnsOne("DataLayer.Rating", "Rating", b1 =>
|
||||||
|
{
|
||||||
|
b1.Property<int>("BookId")
|
||||||
|
.ValueGeneratedOnAdd()
|
||||||
|
.HasColumnType("int")
|
||||||
|
.HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);
|
||||||
|
|
||||||
|
b1.Property<float>("OverallRating")
|
||||||
|
.HasColumnType("real");
|
||||||
|
|
||||||
|
b1.Property<float>("PerformanceRating")
|
||||||
|
.HasColumnType("real");
|
||||||
|
|
||||||
|
b1.Property<float>("StoryRating")
|
||||||
|
.HasColumnType("real");
|
||||||
|
|
||||||
|
b1.HasKey("BookId");
|
||||||
|
|
||||||
|
b1.ToTable("Books");
|
||||||
|
|
||||||
|
b1.WithOwner()
|
||||||
|
.HasForeignKey("BookId");
|
||||||
|
});
|
||||||
|
|
||||||
b.OwnsMany("DataLayer.Supplement", "Supplements", b1 =>
|
b.OwnsMany("DataLayer.Supplement", "Supplements", b1 =>
|
||||||
{
|
{
|
||||||
b1.Property<int>("SupplementId")
|
b1.Property<int>("SupplementId")
|
||||||
.ValueGeneratedOnAdd()
|
.ValueGeneratedOnAdd()
|
||||||
|
.HasColumnType("int")
|
||||||
.HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);
|
.HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);
|
||||||
|
|
||||||
b1.Property<int>("BookId");
|
b1.Property<int>("BookId")
|
||||||
|
.HasColumnType("int");
|
||||||
|
|
||||||
b1.Property<string>("Url");
|
b1.Property<string>("Url")
|
||||||
|
.HasColumnType("nvarchar(max)");
|
||||||
|
|
||||||
b1.HasKey("SupplementId");
|
b1.HasKey("SupplementId");
|
||||||
|
|
||||||
@ -191,69 +247,47 @@ namespace DataLayer.Migrations
|
|||||||
|
|
||||||
b1.ToTable("Supplement");
|
b1.ToTable("Supplement");
|
||||||
|
|
||||||
b1.HasOne("DataLayer.Book", "Book")
|
b1.WithOwner("Book")
|
||||||
.WithMany("Supplements")
|
.HasForeignKey("BookId");
|
||||||
.HasForeignKey("BookId")
|
|
||||||
.OnDelete(DeleteBehavior.Cascade);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
b.OwnsOne("DataLayer.UserDefinedItem", "UserDefinedItem", b1 =>
|
b.OwnsOne("DataLayer.UserDefinedItem", "UserDefinedItem", b1 =>
|
||||||
{
|
{
|
||||||
b1.Property<int>("BookId");
|
b1.Property<int>("BookId")
|
||||||
|
.HasColumnType("int");
|
||||||
|
|
||||||
b1.Property<string>("Tags");
|
b1.Property<string>("Tags")
|
||||||
|
.HasColumnType("nvarchar(max)");
|
||||||
|
|
||||||
b1.HasKey("BookId");
|
b1.HasKey("BookId");
|
||||||
|
|
||||||
b1.ToTable("UserDefinedItem");
|
b1.ToTable("UserDefinedItem");
|
||||||
|
|
||||||
b1.HasOne("DataLayer.Book", "Book")
|
b1.WithOwner("Book")
|
||||||
.WithOne("UserDefinedItem")
|
.HasForeignKey("BookId");
|
||||||
.HasForeignKey("DataLayer.UserDefinedItem", "BookId")
|
|
||||||
.OnDelete(DeleteBehavior.Cascade);
|
|
||||||
|
|
||||||
b1.OwnsOne("DataLayer.Rating", "Rating", b2 =>
|
b1.OwnsOne("DataLayer.Rating", "Rating", b2 =>
|
||||||
{
|
{
|
||||||
b2.Property<int>("UserDefinedItemBookId");
|
b2.Property<int>("UserDefinedItemBookId")
|
||||||
|
.HasColumnType("int");
|
||||||
|
|
||||||
b2.Property<float>("OverallRating");
|
b2.Property<float>("OverallRating")
|
||||||
|
.HasColumnType("real");
|
||||||
|
|
||||||
b2.Property<float>("PerformanceRating");
|
b2.Property<float>("PerformanceRating")
|
||||||
|
.HasColumnType("real");
|
||||||
|
|
||||||
b2.Property<float>("StoryRating");
|
b2.Property<float>("StoryRating")
|
||||||
|
.HasColumnType("real");
|
||||||
|
|
||||||
b2.HasKey("UserDefinedItemBookId");
|
b2.HasKey("UserDefinedItemBookId");
|
||||||
|
|
||||||
b2.ToTable("UserDefinedItem");
|
b2.ToTable("UserDefinedItem");
|
||||||
|
|
||||||
b2.HasOne("DataLayer.UserDefinedItem")
|
b2.WithOwner()
|
||||||
.WithOne("Rating")
|
.HasForeignKey("UserDefinedItemBookId");
|
||||||
.HasForeignKey("DataLayer.Rating", "UserDefinedItemBookId")
|
|
||||||
.OnDelete(DeleteBehavior.Cascade);
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
b.OwnsOne("DataLayer.Rating", "Rating", b1 =>
|
|
||||||
{
|
|
||||||
b1.Property<int>("BookId")
|
|
||||||
.ValueGeneratedOnAdd()
|
|
||||||
.HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);
|
|
||||||
|
|
||||||
b1.Property<float>("OverallRating");
|
|
||||||
|
|
||||||
b1.Property<float>("PerformanceRating");
|
|
||||||
|
|
||||||
b1.Property<float>("StoryRating");
|
|
||||||
|
|
||||||
b1.HasKey("BookId");
|
|
||||||
|
|
||||||
b1.ToTable("Books");
|
|
||||||
|
|
||||||
b1.HasOne("DataLayer.Book")
|
|
||||||
.WithOne("Rating")
|
|
||||||
.HasForeignKey("DataLayer.Rating", "BookId")
|
|
||||||
.OnDelete(DeleteBehavior.Cascade);
|
|
||||||
});
|
|
||||||
});
|
});
|
||||||
|
|
||||||
modelBuilder.Entity("DataLayer.BookContributor", b =>
|
modelBuilder.Entity("DataLayer.BookContributor", b =>
|
||||||
@ -261,12 +295,14 @@ namespace DataLayer.Migrations
|
|||||||
b.HasOne("DataLayer.Book", "Book")
|
b.HasOne("DataLayer.Book", "Book")
|
||||||
.WithMany("ContributorsLink")
|
.WithMany("ContributorsLink")
|
||||||
.HasForeignKey("BookId")
|
.HasForeignKey("BookId")
|
||||||
.OnDelete(DeleteBehavior.Cascade);
|
.OnDelete(DeleteBehavior.Cascade)
|
||||||
|
.IsRequired();
|
||||||
|
|
||||||
b.HasOne("DataLayer.Contributor", "Contributor")
|
b.HasOne("DataLayer.Contributor", "Contributor")
|
||||||
.WithMany("BooksLink")
|
.WithMany("BooksLink")
|
||||||
.HasForeignKey("ContributorId")
|
.HasForeignKey("ContributorId")
|
||||||
.OnDelete(DeleteBehavior.Cascade);
|
.OnDelete(DeleteBehavior.Cascade)
|
||||||
|
.IsRequired();
|
||||||
});
|
});
|
||||||
|
|
||||||
modelBuilder.Entity("DataLayer.Category", b =>
|
modelBuilder.Entity("DataLayer.Category", b =>
|
||||||
@ -281,7 +317,8 @@ namespace DataLayer.Migrations
|
|||||||
b.HasOne("DataLayer.Book", "Book")
|
b.HasOne("DataLayer.Book", "Book")
|
||||||
.WithOne()
|
.WithOne()
|
||||||
.HasForeignKey("DataLayer.LibraryBook", "BookId")
|
.HasForeignKey("DataLayer.LibraryBook", "BookId")
|
||||||
.OnDelete(DeleteBehavior.Cascade);
|
.OnDelete(DeleteBehavior.Cascade)
|
||||||
|
.IsRequired();
|
||||||
});
|
});
|
||||||
|
|
||||||
modelBuilder.Entity("DataLayer.SeriesBook", b =>
|
modelBuilder.Entity("DataLayer.SeriesBook", b =>
|
||||||
@ -289,12 +326,14 @@ namespace DataLayer.Migrations
|
|||||||
b.HasOne("DataLayer.Book", "Book")
|
b.HasOne("DataLayer.Book", "Book")
|
||||||
.WithMany("SeriesLink")
|
.WithMany("SeriesLink")
|
||||||
.HasForeignKey("BookId")
|
.HasForeignKey("BookId")
|
||||||
.OnDelete(DeleteBehavior.Cascade);
|
.OnDelete(DeleteBehavior.Cascade)
|
||||||
|
.IsRequired();
|
||||||
|
|
||||||
b.HasOne("DataLayer.Series", "Series")
|
b.HasOne("DataLayer.Series", "Series")
|
||||||
.WithMany("BooksLink")
|
.WithMany("BooksLink")
|
||||||
.HasForeignKey("SeriesId")
|
.HasForeignKey("SeriesId")
|
||||||
.OnDelete(DeleteBehavior.Cascade);
|
.OnDelete(DeleteBehavior.Cascade)
|
||||||
|
.IsRequired();
|
||||||
});
|
});
|
||||||
#pragma warning restore 612, 618
|
#pragma warning restore 612, 618
|
||||||
}
|
}
|
||||||
@ -1,10 +1,9 @@
|
|||||||
using System;
|
using System;
|
||||||
using Microsoft.EntityFrameworkCore.Metadata;
|
|
||||||
using Microsoft.EntityFrameworkCore.Migrations;
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
|
|
||||||
namespace DataLayer.Migrations
|
namespace DataLayer.Migrations
|
||||||
{
|
{
|
||||||
public partial class Initial : Migration
|
public partial class UpgradeToCore3 : Migration
|
||||||
{
|
{
|
||||||
protected override void Up(MigrationBuilder migrationBuilder)
|
protected override void Up(MigrationBuilder migrationBuilder)
|
||||||
{
|
{
|
||||||
@ -13,7 +12,7 @@ namespace DataLayer.Migrations
|
|||||||
columns: table => new
|
columns: table => new
|
||||||
{
|
{
|
||||||
CategoryId = table.Column<int>(nullable: false)
|
CategoryId = table.Column<int>(nullable: false)
|
||||||
.Annotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn),
|
.Annotation("SqlServer:Identity", "1, 1"),
|
||||||
AudibleCategoryId = table.Column<string>(nullable: true),
|
AudibleCategoryId = table.Column<string>(nullable: true),
|
||||||
Name = table.Column<string>(nullable: true),
|
Name = table.Column<string>(nullable: true),
|
||||||
ParentCategoryCategoryId = table.Column<int>(nullable: true)
|
ParentCategoryCategoryId = table.Column<int>(nullable: true)
|
||||||
@ -34,7 +33,7 @@ namespace DataLayer.Migrations
|
|||||||
columns: table => new
|
columns: table => new
|
||||||
{
|
{
|
||||||
ContributorId = table.Column<int>(nullable: false)
|
ContributorId = table.Column<int>(nullable: false)
|
||||||
.Annotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn),
|
.Annotation("SqlServer:Identity", "1, 1"),
|
||||||
Name = table.Column<string>(nullable: true),
|
Name = table.Column<string>(nullable: true),
|
||||||
AudibleAuthorId = table.Column<string>(nullable: true)
|
AudibleAuthorId = table.Column<string>(nullable: true)
|
||||||
},
|
},
|
||||||
@ -48,7 +47,7 @@ namespace DataLayer.Migrations
|
|||||||
columns: table => new
|
columns: table => new
|
||||||
{
|
{
|
||||||
SeriesId = table.Column<int>(nullable: false)
|
SeriesId = table.Column<int>(nullable: false)
|
||||||
.Annotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn),
|
.Annotation("SqlServer:Identity", "1, 1"),
|
||||||
AudibleSeriesId = table.Column<string>(nullable: true),
|
AudibleSeriesId = table.Column<string>(nullable: true),
|
||||||
Name = table.Column<string>(nullable: true)
|
Name = table.Column<string>(nullable: true)
|
||||||
},
|
},
|
||||||
@ -62,7 +61,7 @@ namespace DataLayer.Migrations
|
|||||||
columns: table => new
|
columns: table => new
|
||||||
{
|
{
|
||||||
BookId = table.Column<int>(nullable: false)
|
BookId = table.Column<int>(nullable: false)
|
||||||
.Annotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn),
|
.Annotation("SqlServer:Identity", "1, 1"),
|
||||||
AudibleProductId = table.Column<string>(nullable: true),
|
AudibleProductId = table.Column<string>(nullable: true),
|
||||||
Title = table.Column<string>(nullable: true),
|
Title = table.Column<string>(nullable: true),
|
||||||
Description = table.Column<string>(nullable: true),
|
Description = table.Column<string>(nullable: true),
|
||||||
@ -70,12 +69,11 @@ namespace DataLayer.Migrations
|
|||||||
PictureId = table.Column<string>(nullable: true),
|
PictureId = table.Column<string>(nullable: true),
|
||||||
HasBookDetails = table.Column<bool>(nullable: false),
|
HasBookDetails = table.Column<bool>(nullable: false),
|
||||||
IsAbridged = table.Column<bool>(nullable: false),
|
IsAbridged = table.Column<bool>(nullable: false),
|
||||||
Publisher = table.Column<string>(nullable: true),
|
|
||||||
DatePublished = table.Column<DateTime>(nullable: true),
|
DatePublished = table.Column<DateTime>(nullable: true),
|
||||||
CategoryId = table.Column<int>(nullable: false),
|
CategoryId = table.Column<int>(nullable: false),
|
||||||
Rating_OverallRating = table.Column<float>(nullable: false),
|
Rating_OverallRating = table.Column<float>(nullable: true),
|
||||||
Rating_PerformanceRating = table.Column<float>(nullable: false),
|
Rating_PerformanceRating = table.Column<float>(nullable: true),
|
||||||
Rating_StoryRating = table.Column<float>(nullable: false)
|
Rating_StoryRating = table.Column<float>(nullable: true)
|
||||||
},
|
},
|
||||||
constraints: table =>
|
constraints: table =>
|
||||||
{
|
{
|
||||||
@ -163,7 +161,7 @@ namespace DataLayer.Migrations
|
|||||||
columns: table => new
|
columns: table => new
|
||||||
{
|
{
|
||||||
SupplementId = table.Column<int>(nullable: false)
|
SupplementId = table.Column<int>(nullable: false)
|
||||||
.Annotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn),
|
.Annotation("SqlServer:Identity", "1, 1"),
|
||||||
BookId = table.Column<int>(nullable: false),
|
BookId = table.Column<int>(nullable: false),
|
||||||
Url = table.Column<string>(nullable: true)
|
Url = table.Column<string>(nullable: true)
|
||||||
},
|
},
|
||||||
@ -184,9 +182,9 @@ namespace DataLayer.Migrations
|
|||||||
{
|
{
|
||||||
BookId = table.Column<int>(nullable: false),
|
BookId = table.Column<int>(nullable: false),
|
||||||
Tags = table.Column<string>(nullable: true),
|
Tags = table.Column<string>(nullable: true),
|
||||||
Rating_OverallRating = table.Column<float>(nullable: false),
|
Rating_OverallRating = table.Column<float>(nullable: true),
|
||||||
Rating_PerformanceRating = table.Column<float>(nullable: false),
|
Rating_PerformanceRating = table.Column<float>(nullable: true),
|
||||||
Rating_StoryRating = table.Column<float>(nullable: false)
|
Rating_StoryRating = table.Column<float>(nullable: true)
|
||||||
},
|
},
|
||||||
constraints: table =>
|
constraints: table =>
|
||||||
{
|
{
|
||||||
@ -199,6 +197,11 @@ namespace DataLayer.Migrations
|
|||||||
onDelete: ReferentialAction.Cascade);
|
onDelete: ReferentialAction.Cascade);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
migrationBuilder.InsertData(
|
||||||
|
table: "Categories",
|
||||||
|
columns: new[] { "CategoryId", "AudibleCategoryId", "Name", "ParentCategoryCategoryId" },
|
||||||
|
values: new object[] { -1, "", "", null });
|
||||||
|
|
||||||
migrationBuilder.CreateIndex(
|
migrationBuilder.CreateIndex(
|
||||||
name: "IX_BookContributor_BookId",
|
name: "IX_BookContributor_BookId",
|
||||||
table: "BookContributor",
|
table: "BookContributor",
|
||||||
@ -15,7 +15,7 @@ namespace DataLayer.Migrations
|
|||||||
{
|
{
|
||||||
#pragma warning disable 612, 618
|
#pragma warning disable 612, 618
|
||||||
modelBuilder
|
modelBuilder
|
||||||
.HasAnnotation("ProductVersion", "2.2.0-rtm-35687")
|
.HasAnnotation("ProductVersion", "3.0.0")
|
||||||
.HasAnnotation("Relational:MaxIdentifierLength", 128)
|
.HasAnnotation("Relational:MaxIdentifierLength", 128)
|
||||||
.HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);
|
.HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);
|
||||||
|
|
||||||
@ -23,25 +23,35 @@ namespace DataLayer.Migrations
|
|||||||
{
|
{
|
||||||
b.Property<int>("BookId")
|
b.Property<int>("BookId")
|
||||||
.ValueGeneratedOnAdd()
|
.ValueGeneratedOnAdd()
|
||||||
|
.HasColumnType("int")
|
||||||
.HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);
|
.HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);
|
||||||
|
|
||||||
b.Property<string>("AudibleProductId");
|
b.Property<string>("AudibleProductId")
|
||||||
|
.HasColumnType("nvarchar(450)");
|
||||||
|
|
||||||
b.Property<int>("CategoryId");
|
b.Property<int>("CategoryId")
|
||||||
|
.HasColumnType("int");
|
||||||
|
|
||||||
b.Property<DateTime?>("DatePublished");
|
b.Property<DateTime?>("DatePublished")
|
||||||
|
.HasColumnType("datetime2");
|
||||||
|
|
||||||
b.Property<string>("Description");
|
b.Property<string>("Description")
|
||||||
|
.HasColumnType("nvarchar(max)");
|
||||||
|
|
||||||
b.Property<bool>("HasBookDetails");
|
b.Property<bool>("HasBookDetails")
|
||||||
|
.HasColumnType("bit");
|
||||||
|
|
||||||
b.Property<bool>("IsAbridged");
|
b.Property<bool>("IsAbridged")
|
||||||
|
.HasColumnType("bit");
|
||||||
|
|
||||||
b.Property<int>("LengthInMinutes");
|
b.Property<int>("LengthInMinutes")
|
||||||
|
.HasColumnType("int");
|
||||||
|
|
||||||
b.Property<string>("PictureId");
|
b.Property<string>("PictureId")
|
||||||
|
.HasColumnType("nvarchar(max)");
|
||||||
|
|
||||||
b.Property<string>("Title");
|
b.Property<string>("Title")
|
||||||
|
.HasColumnType("nvarchar(max)");
|
||||||
|
|
||||||
b.HasKey("BookId");
|
b.HasKey("BookId");
|
||||||
|
|
||||||
@ -54,13 +64,17 @@ namespace DataLayer.Migrations
|
|||||||
|
|
||||||
modelBuilder.Entity("DataLayer.BookContributor", b =>
|
modelBuilder.Entity("DataLayer.BookContributor", b =>
|
||||||
{
|
{
|
||||||
b.Property<int>("BookId");
|
b.Property<int>("BookId")
|
||||||
|
.HasColumnType("int");
|
||||||
|
|
||||||
b.Property<int>("ContributorId");
|
b.Property<int>("ContributorId")
|
||||||
|
.HasColumnType("int");
|
||||||
|
|
||||||
b.Property<int>("Role");
|
b.Property<int>("Role")
|
||||||
|
.HasColumnType("int");
|
||||||
|
|
||||||
b.Property<byte>("Order");
|
b.Property<byte>("Order")
|
||||||
|
.HasColumnType("tinyint");
|
||||||
|
|
||||||
b.HasKey("BookId", "ContributorId", "Role");
|
b.HasKey("BookId", "ContributorId", "Role");
|
||||||
|
|
||||||
@ -75,13 +89,17 @@ namespace DataLayer.Migrations
|
|||||||
{
|
{
|
||||||
b.Property<int>("CategoryId")
|
b.Property<int>("CategoryId")
|
||||||
.ValueGeneratedOnAdd()
|
.ValueGeneratedOnAdd()
|
||||||
|
.HasColumnType("int")
|
||||||
.HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);
|
.HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);
|
||||||
|
|
||||||
b.Property<string>("AudibleCategoryId");
|
b.Property<string>("AudibleCategoryId")
|
||||||
|
.HasColumnType("nvarchar(450)");
|
||||||
|
|
||||||
b.Property<string>("Name");
|
b.Property<string>("Name")
|
||||||
|
.HasColumnType("nvarchar(max)");
|
||||||
|
|
||||||
b.Property<int?>("ParentCategoryCategoryId");
|
b.Property<int?>("ParentCategoryCategoryId")
|
||||||
|
.HasColumnType("int");
|
||||||
|
|
||||||
b.HasKey("CategoryId");
|
b.HasKey("CategoryId");
|
||||||
|
|
||||||
@ -104,11 +122,14 @@ namespace DataLayer.Migrations
|
|||||||
{
|
{
|
||||||
b.Property<int>("ContributorId")
|
b.Property<int>("ContributorId")
|
||||||
.ValueGeneratedOnAdd()
|
.ValueGeneratedOnAdd()
|
||||||
|
.HasColumnType("int")
|
||||||
.HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);
|
.HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);
|
||||||
|
|
||||||
b.Property<string>("AudibleAuthorId");
|
b.Property<string>("AudibleAuthorId")
|
||||||
|
.HasColumnType("nvarchar(max)");
|
||||||
|
|
||||||
b.Property<string>("Name");
|
b.Property<string>("Name")
|
||||||
|
.HasColumnType("nvarchar(450)");
|
||||||
|
|
||||||
b.HasKey("ContributorId");
|
b.HasKey("ContributorId");
|
||||||
|
|
||||||
@ -119,11 +140,14 @@ namespace DataLayer.Migrations
|
|||||||
|
|
||||||
modelBuilder.Entity("DataLayer.LibraryBook", b =>
|
modelBuilder.Entity("DataLayer.LibraryBook", b =>
|
||||||
{
|
{
|
||||||
b.Property<int>("BookId");
|
b.Property<int>("BookId")
|
||||||
|
.HasColumnType("int");
|
||||||
|
|
||||||
b.Property<DateTime>("DateAdded");
|
b.Property<DateTime>("DateAdded")
|
||||||
|
.HasColumnType("datetime2");
|
||||||
|
|
||||||
b.Property<string>("DownloadBookLink");
|
b.Property<string>("DownloadBookLink")
|
||||||
|
.HasColumnType("nvarchar(max)");
|
||||||
|
|
||||||
b.HasKey("BookId");
|
b.HasKey("BookId");
|
||||||
|
|
||||||
@ -134,11 +158,14 @@ namespace DataLayer.Migrations
|
|||||||
{
|
{
|
||||||
b.Property<int>("SeriesId")
|
b.Property<int>("SeriesId")
|
||||||
.ValueGeneratedOnAdd()
|
.ValueGeneratedOnAdd()
|
||||||
|
.HasColumnType("int")
|
||||||
.HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);
|
.HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);
|
||||||
|
|
||||||
b.Property<string>("AudibleSeriesId");
|
b.Property<string>("AudibleSeriesId")
|
||||||
|
.HasColumnType("nvarchar(450)");
|
||||||
|
|
||||||
b.Property<string>("Name");
|
b.Property<string>("Name")
|
||||||
|
.HasColumnType("nvarchar(max)");
|
||||||
|
|
||||||
b.HasKey("SeriesId");
|
b.HasKey("SeriesId");
|
||||||
|
|
||||||
@ -149,11 +176,14 @@ namespace DataLayer.Migrations
|
|||||||
|
|
||||||
modelBuilder.Entity("DataLayer.SeriesBook", b =>
|
modelBuilder.Entity("DataLayer.SeriesBook", b =>
|
||||||
{
|
{
|
||||||
b.Property<int>("SeriesId");
|
b.Property<int>("SeriesId")
|
||||||
|
.HasColumnType("int");
|
||||||
|
|
||||||
b.Property<int>("BookId");
|
b.Property<int>("BookId")
|
||||||
|
.HasColumnType("int");
|
||||||
|
|
||||||
b.Property<float?>("Index");
|
b.Property<float?>("Index")
|
||||||
|
.HasColumnType("real");
|
||||||
|
|
||||||
b.HasKey("SeriesId", "BookId");
|
b.HasKey("SeriesId", "BookId");
|
||||||
|
|
||||||
@ -169,17 +199,45 @@ namespace DataLayer.Migrations
|
|||||||
b.HasOne("DataLayer.Category", "Category")
|
b.HasOne("DataLayer.Category", "Category")
|
||||||
.WithMany()
|
.WithMany()
|
||||||
.HasForeignKey("CategoryId")
|
.HasForeignKey("CategoryId")
|
||||||
.OnDelete(DeleteBehavior.Cascade);
|
.OnDelete(DeleteBehavior.Cascade)
|
||||||
|
.IsRequired();
|
||||||
|
|
||||||
|
b.OwnsOne("DataLayer.Rating", "Rating", b1 =>
|
||||||
|
{
|
||||||
|
b1.Property<int>("BookId")
|
||||||
|
.ValueGeneratedOnAdd()
|
||||||
|
.HasColumnType("int")
|
||||||
|
.HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);
|
||||||
|
|
||||||
|
b1.Property<float>("OverallRating")
|
||||||
|
.HasColumnType("real");
|
||||||
|
|
||||||
|
b1.Property<float>("PerformanceRating")
|
||||||
|
.HasColumnType("real");
|
||||||
|
|
||||||
|
b1.Property<float>("StoryRating")
|
||||||
|
.HasColumnType("real");
|
||||||
|
|
||||||
|
b1.HasKey("BookId");
|
||||||
|
|
||||||
|
b1.ToTable("Books");
|
||||||
|
|
||||||
|
b1.WithOwner()
|
||||||
|
.HasForeignKey("BookId");
|
||||||
|
});
|
||||||
|
|
||||||
b.OwnsMany("DataLayer.Supplement", "Supplements", b1 =>
|
b.OwnsMany("DataLayer.Supplement", "Supplements", b1 =>
|
||||||
{
|
{
|
||||||
b1.Property<int>("SupplementId")
|
b1.Property<int>("SupplementId")
|
||||||
.ValueGeneratedOnAdd()
|
.ValueGeneratedOnAdd()
|
||||||
|
.HasColumnType("int")
|
||||||
.HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);
|
.HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);
|
||||||
|
|
||||||
b1.Property<int>("BookId");
|
b1.Property<int>("BookId")
|
||||||
|
.HasColumnType("int");
|
||||||
|
|
||||||
b1.Property<string>("Url");
|
b1.Property<string>("Url")
|
||||||
|
.HasColumnType("nvarchar(max)");
|
||||||
|
|
||||||
b1.HasKey("SupplementId");
|
b1.HasKey("SupplementId");
|
||||||
|
|
||||||
@ -187,69 +245,47 @@ namespace DataLayer.Migrations
|
|||||||
|
|
||||||
b1.ToTable("Supplement");
|
b1.ToTable("Supplement");
|
||||||
|
|
||||||
b1.HasOne("DataLayer.Book", "Book")
|
b1.WithOwner("Book")
|
||||||
.WithMany("Supplements")
|
.HasForeignKey("BookId");
|
||||||
.HasForeignKey("BookId")
|
|
||||||
.OnDelete(DeleteBehavior.Cascade);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
b.OwnsOne("DataLayer.UserDefinedItem", "UserDefinedItem", b1 =>
|
b.OwnsOne("DataLayer.UserDefinedItem", "UserDefinedItem", b1 =>
|
||||||
{
|
{
|
||||||
b1.Property<int>("BookId");
|
b1.Property<int>("BookId")
|
||||||
|
.HasColumnType("int");
|
||||||
|
|
||||||
b1.Property<string>("Tags");
|
b1.Property<string>("Tags")
|
||||||
|
.HasColumnType("nvarchar(max)");
|
||||||
|
|
||||||
b1.HasKey("BookId");
|
b1.HasKey("BookId");
|
||||||
|
|
||||||
b1.ToTable("UserDefinedItem");
|
b1.ToTable("UserDefinedItem");
|
||||||
|
|
||||||
b1.HasOne("DataLayer.Book", "Book")
|
b1.WithOwner("Book")
|
||||||
.WithOne("UserDefinedItem")
|
.HasForeignKey("BookId");
|
||||||
.HasForeignKey("DataLayer.UserDefinedItem", "BookId")
|
|
||||||
.OnDelete(DeleteBehavior.Cascade);
|
|
||||||
|
|
||||||
b1.OwnsOne("DataLayer.Rating", "Rating", b2 =>
|
b1.OwnsOne("DataLayer.Rating", "Rating", b2 =>
|
||||||
{
|
{
|
||||||
b2.Property<int>("UserDefinedItemBookId");
|
b2.Property<int>("UserDefinedItemBookId")
|
||||||
|
.HasColumnType("int");
|
||||||
|
|
||||||
b2.Property<float>("OverallRating");
|
b2.Property<float>("OverallRating")
|
||||||
|
.HasColumnType("real");
|
||||||
|
|
||||||
b2.Property<float>("PerformanceRating");
|
b2.Property<float>("PerformanceRating")
|
||||||
|
.HasColumnType("real");
|
||||||
|
|
||||||
b2.Property<float>("StoryRating");
|
b2.Property<float>("StoryRating")
|
||||||
|
.HasColumnType("real");
|
||||||
|
|
||||||
b2.HasKey("UserDefinedItemBookId");
|
b2.HasKey("UserDefinedItemBookId");
|
||||||
|
|
||||||
b2.ToTable("UserDefinedItem");
|
b2.ToTable("UserDefinedItem");
|
||||||
|
|
||||||
b2.HasOne("DataLayer.UserDefinedItem")
|
b2.WithOwner()
|
||||||
.WithOne("Rating")
|
.HasForeignKey("UserDefinedItemBookId");
|
||||||
.HasForeignKey("DataLayer.Rating", "UserDefinedItemBookId")
|
|
||||||
.OnDelete(DeleteBehavior.Cascade);
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
b.OwnsOne("DataLayer.Rating", "Rating", b1 =>
|
|
||||||
{
|
|
||||||
b1.Property<int>("BookId")
|
|
||||||
.ValueGeneratedOnAdd()
|
|
||||||
.HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);
|
|
||||||
|
|
||||||
b1.Property<float>("OverallRating");
|
|
||||||
|
|
||||||
b1.Property<float>("PerformanceRating");
|
|
||||||
|
|
||||||
b1.Property<float>("StoryRating");
|
|
||||||
|
|
||||||
b1.HasKey("BookId");
|
|
||||||
|
|
||||||
b1.ToTable("Books");
|
|
||||||
|
|
||||||
b1.HasOne("DataLayer.Book")
|
|
||||||
.WithOne("Rating")
|
|
||||||
.HasForeignKey("DataLayer.Rating", "BookId")
|
|
||||||
.OnDelete(DeleteBehavior.Cascade);
|
|
||||||
});
|
|
||||||
});
|
});
|
||||||
|
|
||||||
modelBuilder.Entity("DataLayer.BookContributor", b =>
|
modelBuilder.Entity("DataLayer.BookContributor", b =>
|
||||||
@ -257,12 +293,14 @@ namespace DataLayer.Migrations
|
|||||||
b.HasOne("DataLayer.Book", "Book")
|
b.HasOne("DataLayer.Book", "Book")
|
||||||
.WithMany("ContributorsLink")
|
.WithMany("ContributorsLink")
|
||||||
.HasForeignKey("BookId")
|
.HasForeignKey("BookId")
|
||||||
.OnDelete(DeleteBehavior.Cascade);
|
.OnDelete(DeleteBehavior.Cascade)
|
||||||
|
.IsRequired();
|
||||||
|
|
||||||
b.HasOne("DataLayer.Contributor", "Contributor")
|
b.HasOne("DataLayer.Contributor", "Contributor")
|
||||||
.WithMany("BooksLink")
|
.WithMany("BooksLink")
|
||||||
.HasForeignKey("ContributorId")
|
.HasForeignKey("ContributorId")
|
||||||
.OnDelete(DeleteBehavior.Cascade);
|
.OnDelete(DeleteBehavior.Cascade)
|
||||||
|
.IsRequired();
|
||||||
});
|
});
|
||||||
|
|
||||||
modelBuilder.Entity("DataLayer.Category", b =>
|
modelBuilder.Entity("DataLayer.Category", b =>
|
||||||
@ -277,7 +315,8 @@ namespace DataLayer.Migrations
|
|||||||
b.HasOne("DataLayer.Book", "Book")
|
b.HasOne("DataLayer.Book", "Book")
|
||||||
.WithOne()
|
.WithOne()
|
||||||
.HasForeignKey("DataLayer.LibraryBook", "BookId")
|
.HasForeignKey("DataLayer.LibraryBook", "BookId")
|
||||||
.OnDelete(DeleteBehavior.Cascade);
|
.OnDelete(DeleteBehavior.Cascade)
|
||||||
|
.IsRequired();
|
||||||
});
|
});
|
||||||
|
|
||||||
modelBuilder.Entity("DataLayer.SeriesBook", b =>
|
modelBuilder.Entity("DataLayer.SeriesBook", b =>
|
||||||
@ -285,12 +324,14 @@ namespace DataLayer.Migrations
|
|||||||
b.HasOne("DataLayer.Book", "Book")
|
b.HasOne("DataLayer.Book", "Book")
|
||||||
.WithMany("SeriesLink")
|
.WithMany("SeriesLink")
|
||||||
.HasForeignKey("BookId")
|
.HasForeignKey("BookId")
|
||||||
.OnDelete(DeleteBehavior.Cascade);
|
.OnDelete(DeleteBehavior.Cascade)
|
||||||
|
.IsRequired();
|
||||||
|
|
||||||
b.HasOne("DataLayer.Series", "Series")
|
b.HasOne("DataLayer.Series", "Series")
|
||||||
.WithMany("BooksLink")
|
.WithMany("BooksLink")
|
||||||
.HasForeignKey("SeriesId")
|
.HasForeignKey("SeriesId")
|
||||||
.OnDelete(DeleteBehavior.Cascade);
|
.OnDelete(DeleteBehavior.Cascade)
|
||||||
|
.IsRequired();
|
||||||
});
|
});
|
||||||
#pragma warning restore 612, 618
|
#pragma warning restore 612, 618
|
||||||
}
|
}
|
||||||
@ -8,7 +8,7 @@ namespace DataLayer
|
|||||||
public static class RemoveOrphansCommand
|
public static class RemoveOrphansCommand
|
||||||
{
|
{
|
||||||
public static int RemoveOrphans(this LibationContext context)
|
public static int RemoveOrphans(this LibationContext context)
|
||||||
=> context.Database.ExecuteSqlCommand(@"
|
=> context.Database.ExecuteSqlRaw(@"
|
||||||
delete c
|
delete c
|
||||||
from Contributors c
|
from Contributors c
|
||||||
left join BookContributor bc on c.ContributorId = bc.ContributorId
|
left join BookContributor bc on c.ContributorId = bc.ContributorId
|
||||||
|
|||||||
@ -17,31 +17,40 @@ namespace DataLayer.Configurations
|
|||||||
//
|
//
|
||||||
entity.Ignore(nameof(Book.Authors));
|
entity.Ignore(nameof(Book.Authors));
|
||||||
entity.Ignore(nameof(Book.Narrators));
|
entity.Ignore(nameof(Book.Narrators));
|
||||||
//// these don't seem to matter
|
//// these don't seem to matter
|
||||||
//entity.Ignore(nameof(Book.AuthorNames));
|
//entity.Ignore(nameof(Book.AuthorNames));
|
||||||
//entity.Ignore(nameof(Book.NarratorNames));
|
//entity.Ignore(nameof(Book.NarratorNames));
|
||||||
//entity.Ignore(nameof(Book.HasPdfs));
|
//entity.Ignore(nameof(Book.HasPdfs));
|
||||||
|
|
||||||
// OwnsMany: "Can only ever appear on navigation properties of other entity types.
|
// OwnsMany: "Can only ever appear on navigation properties of other entity types.
|
||||||
// Are automatically loaded, and can only be tracked by a DbContext alongside their owner."
|
// Are automatically loaded, and can only be tracked by a DbContext alongside their owner."
|
||||||
entity.OwnsMany(b => b.Supplements);
|
entity
|
||||||
|
.OwnsMany(b => b.Supplements, b_s =>
|
||||||
|
{
|
||||||
|
b_s.WithOwner(s => s.Book)
|
||||||
|
.HasForeignKey(s => s.BookId);
|
||||||
|
b_s.HasKey(s => s.SupplementId);
|
||||||
|
});
|
||||||
// even though it's owned, we need to map its backing field
|
// even though it's owned, we need to map its backing field
|
||||||
entity
|
entity
|
||||||
.Metadata
|
.Metadata
|
||||||
.FindNavigation(nameof(Book.Supplements))
|
.FindNavigation(nameof(Book.Supplements))
|
||||||
.SetPropertyAccessMode(PropertyAccessMode.Field);
|
.SetPropertyAccessMode(PropertyAccessMode.Field);
|
||||||
|
|
||||||
// owns it 1:1, but store in separate table
|
// owns it 1:1, store in separate table
|
||||||
entity
|
entity
|
||||||
.OwnsOne(b => b.UserDefinedItem, b_udi => b_udi.ToTable(nameof(Book.UserDefinedItem)));
|
.OwnsOne(b => b.UserDefinedItem, b_udi =>
|
||||||
// UserDefinedItem must link back to book so we know how to log changed tags.
|
{
|
||||||
// ie: when a tag changes, we need to get the parent book's product id
|
b_udi.WithOwner(udi => udi.Book)
|
||||||
entity
|
.HasForeignKey(udi => udi.BookId);
|
||||||
.HasOne(b => b.UserDefinedItem)
|
b_udi.Property(udi => udi.BookId).ValueGeneratedNever();
|
||||||
.WithOne(udi => udi.Book)
|
b_udi.ToTable(nameof(Book.UserDefinedItem));
|
||||||
.HasForeignKey<UserDefinedItem>(udi => udi.BookId);
|
|
||||||
|
|
||||||
entity
|
// owns it 1:1, store in same table
|
||||||
|
b_udi.OwnsOne(udi => udi.Rating);
|
||||||
|
});
|
||||||
|
|
||||||
|
entity
|
||||||
.Metadata
|
.Metadata
|
||||||
.FindNavigation(nameof(Book.ContributorsLink))
|
.FindNavigation(nameof(Book.ContributorsLink))
|
||||||
// PropertyAccessMode.Field : Contributions is a get-only property, not a field, so use its backing field
|
// PropertyAccessMode.Field : Contributions is a get-only property, not a field, so use its backing field
|
||||||
@ -57,6 +66,6 @@ namespace DataLayer.Configurations
|
|||||||
.HasOne(b => b.Category)
|
.HasOne(b => b.Category)
|
||||||
.WithMany()
|
.WithMany()
|
||||||
.HasForeignKey(b => b.CategoryId);
|
.HasForeignKey(b => b.CategoryId);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1,17 +0,0 @@
|
|||||||
using Microsoft.EntityFrameworkCore;
|
|
||||||
using Microsoft.EntityFrameworkCore.Metadata.Builders;
|
|
||||||
|
|
||||||
namespace DataLayer.Configurations
|
|
||||||
{
|
|
||||||
internal class SupplementConfig : IEntityTypeConfiguration<Supplement>
|
|
||||||
{
|
|
||||||
public void Configure(EntityTypeBuilder<Supplement> entity)
|
|
||||||
{
|
|
||||||
entity.HasKey(s => s.SupplementId);
|
|
||||||
entity
|
|
||||||
.HasOne(s => s.Book)
|
|
||||||
.WithMany(b => b.Supplements)
|
|
||||||
.HasForeignKey(s => s.BookId);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -1,13 +0,0 @@
|
|||||||
using Microsoft.EntityFrameworkCore;
|
|
||||||
using Microsoft.EntityFrameworkCore.Metadata.Builders;
|
|
||||||
|
|
||||||
namespace DataLayer.Configurations
|
|
||||||
{
|
|
||||||
internal class UserDefinedItemConfig : IEntityTypeConfiguration<UserDefinedItem>
|
|
||||||
{
|
|
||||||
public void Configure(EntityTypeBuilder<UserDefinedItem> entity)
|
|
||||||
{
|
|
||||||
entity.OwnsOne(p => p.Rating);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -51,8 +51,6 @@ namespace DataLayer
|
|||||||
modelBuilder.ApplyConfiguration(new BookConfig());
|
modelBuilder.ApplyConfiguration(new BookConfig());
|
||||||
modelBuilder.ApplyConfiguration(new ContributorConfig());
|
modelBuilder.ApplyConfiguration(new ContributorConfig());
|
||||||
modelBuilder.ApplyConfiguration(new BookContributorConfig());
|
modelBuilder.ApplyConfiguration(new BookContributorConfig());
|
||||||
modelBuilder.ApplyConfiguration(new SupplementConfig());
|
|
||||||
modelBuilder.ApplyConfiguration(new UserDefinedItemConfig());
|
|
||||||
modelBuilder.ApplyConfiguration(new LibraryBookConfig());
|
modelBuilder.ApplyConfiguration(new LibraryBookConfig());
|
||||||
modelBuilder.ApplyConfiguration(new SeriesConfig());
|
modelBuilder.ApplyConfiguration(new SeriesConfig());
|
||||||
modelBuilder.ApplyConfiguration(new SeriesBookConfig());
|
modelBuilder.ApplyConfiguration(new SeriesBookConfig());
|
||||||
|
|||||||
@ -1,294 +0,0 @@
|
|||||||
// <auto-generated />
|
|
||||||
using System;
|
|
||||||
using DataLayer;
|
|
||||||
using Microsoft.EntityFrameworkCore;
|
|
||||||
using Microsoft.EntityFrameworkCore.Infrastructure;
|
|
||||||
using Microsoft.EntityFrameworkCore.Metadata;
|
|
||||||
using Microsoft.EntityFrameworkCore.Migrations;
|
|
||||||
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
|
|
||||||
|
|
||||||
namespace DataLayer.Migrations
|
|
||||||
{
|
|
||||||
[DbContext(typeof(LibationContext))]
|
|
||||||
[Migration("20190114190811_Initial")]
|
|
||||||
partial class Initial
|
|
||||||
{
|
|
||||||
protected override void BuildTargetModel(ModelBuilder modelBuilder)
|
|
||||||
{
|
|
||||||
#pragma warning disable 612, 618
|
|
||||||
modelBuilder
|
|
||||||
.HasAnnotation("ProductVersion", "2.2.0-rtm-35687")
|
|
||||||
.HasAnnotation("Relational:MaxIdentifierLength", 128)
|
|
||||||
.HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);
|
|
||||||
|
|
||||||
modelBuilder.Entity("DataLayer.Book", b =>
|
|
||||||
{
|
|
||||||
b.Property<int>("BookId")
|
|
||||||
.ValueGeneratedOnAdd()
|
|
||||||
.HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);
|
|
||||||
|
|
||||||
b.Property<string>("AudibleProductId");
|
|
||||||
|
|
||||||
b.Property<int>("CategoryId");
|
|
||||||
|
|
||||||
b.Property<DateTime?>("DatePublished");
|
|
||||||
|
|
||||||
b.Property<string>("Description");
|
|
||||||
|
|
||||||
b.Property<bool>("HasBookDetails");
|
|
||||||
|
|
||||||
b.Property<bool>("IsAbridged");
|
|
||||||
|
|
||||||
b.Property<int>("LengthInMinutes");
|
|
||||||
|
|
||||||
b.Property<string>("PictureId");
|
|
||||||
|
|
||||||
b.Property<string>("Publisher");
|
|
||||||
|
|
||||||
b.Property<string>("Title");
|
|
||||||
|
|
||||||
b.HasKey("BookId");
|
|
||||||
|
|
||||||
b.HasIndex("AudibleProductId");
|
|
||||||
|
|
||||||
b.HasIndex("CategoryId");
|
|
||||||
|
|
||||||
b.ToTable("Books");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("DataLayer.BookContributor", b =>
|
|
||||||
{
|
|
||||||
b.Property<int>("BookId");
|
|
||||||
|
|
||||||
b.Property<int>("ContributorId");
|
|
||||||
|
|
||||||
b.Property<int>("Role");
|
|
||||||
|
|
||||||
b.Property<byte>("Order");
|
|
||||||
|
|
||||||
b.HasKey("BookId", "ContributorId", "Role");
|
|
||||||
|
|
||||||
b.HasIndex("BookId");
|
|
||||||
|
|
||||||
b.HasIndex("ContributorId");
|
|
||||||
|
|
||||||
b.ToTable("BookContributor");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("DataLayer.Category", b =>
|
|
||||||
{
|
|
||||||
b.Property<int>("CategoryId")
|
|
||||||
.ValueGeneratedOnAdd()
|
|
||||||
.HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);
|
|
||||||
|
|
||||||
b.Property<string>("AudibleCategoryId");
|
|
||||||
|
|
||||||
b.Property<string>("Name");
|
|
||||||
|
|
||||||
b.Property<int?>("ParentCategoryCategoryId");
|
|
||||||
|
|
||||||
b.HasKey("CategoryId");
|
|
||||||
|
|
||||||
b.HasIndex("AudibleCategoryId");
|
|
||||||
|
|
||||||
b.HasIndex("ParentCategoryCategoryId");
|
|
||||||
|
|
||||||
b.ToTable("Categories");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("DataLayer.Contributor", b =>
|
|
||||||
{
|
|
||||||
b.Property<int>("ContributorId")
|
|
||||||
.ValueGeneratedOnAdd()
|
|
||||||
.HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);
|
|
||||||
|
|
||||||
b.Property<string>("AudibleAuthorId");
|
|
||||||
|
|
||||||
b.Property<string>("Name");
|
|
||||||
|
|
||||||
b.HasKey("ContributorId");
|
|
||||||
|
|
||||||
b.HasIndex("Name");
|
|
||||||
|
|
||||||
b.ToTable("Contributors");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("DataLayer.LibraryBook", b =>
|
|
||||||
{
|
|
||||||
b.Property<int>("BookId");
|
|
||||||
|
|
||||||
b.Property<DateTime>("DateAdded");
|
|
||||||
|
|
||||||
b.Property<string>("DownloadBookLink");
|
|
||||||
|
|
||||||
b.HasKey("BookId");
|
|
||||||
|
|
||||||
b.ToTable("Library");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("DataLayer.Series", b =>
|
|
||||||
{
|
|
||||||
b.Property<int>("SeriesId")
|
|
||||||
.ValueGeneratedOnAdd()
|
|
||||||
.HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);
|
|
||||||
|
|
||||||
b.Property<string>("AudibleSeriesId");
|
|
||||||
|
|
||||||
b.Property<string>("Name");
|
|
||||||
|
|
||||||
b.HasKey("SeriesId");
|
|
||||||
|
|
||||||
b.HasIndex("AudibleSeriesId");
|
|
||||||
|
|
||||||
b.ToTable("Series");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("DataLayer.SeriesBook", b =>
|
|
||||||
{
|
|
||||||
b.Property<int>("SeriesId");
|
|
||||||
|
|
||||||
b.Property<int>("BookId");
|
|
||||||
|
|
||||||
b.Property<float?>("Index");
|
|
||||||
|
|
||||||
b.HasKey("SeriesId", "BookId");
|
|
||||||
|
|
||||||
b.HasIndex("BookId");
|
|
||||||
|
|
||||||
b.HasIndex("SeriesId");
|
|
||||||
|
|
||||||
b.ToTable("SeriesBook");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("DataLayer.Book", b =>
|
|
||||||
{
|
|
||||||
b.HasOne("DataLayer.Category", "Category")
|
|
||||||
.WithMany()
|
|
||||||
.HasForeignKey("CategoryId")
|
|
||||||
.OnDelete(DeleteBehavior.Cascade);
|
|
||||||
|
|
||||||
b.OwnsMany("DataLayer.Supplement", "Supplements", b1 =>
|
|
||||||
{
|
|
||||||
b1.Property<int>("SupplementId")
|
|
||||||
.ValueGeneratedOnAdd()
|
|
||||||
.HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);
|
|
||||||
|
|
||||||
b1.Property<int>("BookId");
|
|
||||||
|
|
||||||
b1.Property<string>("Url");
|
|
||||||
|
|
||||||
b1.HasKey("SupplementId");
|
|
||||||
|
|
||||||
b1.HasIndex("BookId");
|
|
||||||
|
|
||||||
b1.ToTable("Supplement");
|
|
||||||
|
|
||||||
b1.HasOne("DataLayer.Book", "Book")
|
|
||||||
.WithMany("Supplements")
|
|
||||||
.HasForeignKey("BookId")
|
|
||||||
.OnDelete(DeleteBehavior.Cascade);
|
|
||||||
});
|
|
||||||
|
|
||||||
b.OwnsOne("DataLayer.UserDefinedItem", "UserDefinedItem", b1 =>
|
|
||||||
{
|
|
||||||
b1.Property<int>("BookId");
|
|
||||||
|
|
||||||
b1.Property<string>("Tags");
|
|
||||||
|
|
||||||
b1.HasKey("BookId");
|
|
||||||
|
|
||||||
b1.ToTable("UserDefinedItem");
|
|
||||||
|
|
||||||
b1.HasOne("DataLayer.Book", "Book")
|
|
||||||
.WithOne("UserDefinedItem")
|
|
||||||
.HasForeignKey("DataLayer.UserDefinedItem", "BookId")
|
|
||||||
.OnDelete(DeleteBehavior.Cascade);
|
|
||||||
|
|
||||||
b1.OwnsOne("DataLayer.Rating", "Rating", b2 =>
|
|
||||||
{
|
|
||||||
b2.Property<int>("UserDefinedItemBookId");
|
|
||||||
|
|
||||||
b2.Property<float>("OverallRating");
|
|
||||||
|
|
||||||
b2.Property<float>("PerformanceRating");
|
|
||||||
|
|
||||||
b2.Property<float>("StoryRating");
|
|
||||||
|
|
||||||
b2.HasKey("UserDefinedItemBookId");
|
|
||||||
|
|
||||||
b2.ToTable("UserDefinedItem");
|
|
||||||
|
|
||||||
b2.HasOne("DataLayer.UserDefinedItem")
|
|
||||||
.WithOne("Rating")
|
|
||||||
.HasForeignKey("DataLayer.Rating", "UserDefinedItemBookId")
|
|
||||||
.OnDelete(DeleteBehavior.Cascade);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
b.OwnsOne("DataLayer.Rating", "Rating", b1 =>
|
|
||||||
{
|
|
||||||
b1.Property<int>("BookId")
|
|
||||||
.ValueGeneratedOnAdd()
|
|
||||||
.HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);
|
|
||||||
|
|
||||||
b1.Property<float>("OverallRating");
|
|
||||||
|
|
||||||
b1.Property<float>("PerformanceRating");
|
|
||||||
|
|
||||||
b1.Property<float>("StoryRating");
|
|
||||||
|
|
||||||
b1.HasKey("BookId");
|
|
||||||
|
|
||||||
b1.ToTable("Books");
|
|
||||||
|
|
||||||
b1.HasOne("DataLayer.Book")
|
|
||||||
.WithOne("Rating")
|
|
||||||
.HasForeignKey("DataLayer.Rating", "BookId")
|
|
||||||
.OnDelete(DeleteBehavior.Cascade);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("DataLayer.BookContributor", b =>
|
|
||||||
{
|
|
||||||
b.HasOne("DataLayer.Book", "Book")
|
|
||||||
.WithMany("ContributorsLink")
|
|
||||||
.HasForeignKey("BookId")
|
|
||||||
.OnDelete(DeleteBehavior.Cascade);
|
|
||||||
|
|
||||||
b.HasOne("DataLayer.Contributor", "Contributor")
|
|
||||||
.WithMany("BooksLink")
|
|
||||||
.HasForeignKey("ContributorId")
|
|
||||||
.OnDelete(DeleteBehavior.Cascade);
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("DataLayer.Category", b =>
|
|
||||||
{
|
|
||||||
b.HasOne("DataLayer.Category", "ParentCategory")
|
|
||||||
.WithMany()
|
|
||||||
.HasForeignKey("ParentCategoryCategoryId");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("DataLayer.LibraryBook", b =>
|
|
||||||
{
|
|
||||||
b.HasOne("DataLayer.Book", "Book")
|
|
||||||
.WithOne()
|
|
||||||
.HasForeignKey("DataLayer.LibraryBook", "BookId")
|
|
||||||
.OnDelete(DeleteBehavior.Cascade);
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("DataLayer.SeriesBook", b =>
|
|
||||||
{
|
|
||||||
b.HasOne("DataLayer.Book", "Book")
|
|
||||||
.WithMany("SeriesLink")
|
|
||||||
.HasForeignKey("BookId")
|
|
||||||
.OnDelete(DeleteBehavior.Cascade);
|
|
||||||
|
|
||||||
b.HasOne("DataLayer.Series", "Series")
|
|
||||||
.WithMany("BooksLink")
|
|
||||||
.HasForeignKey("SeriesId")
|
|
||||||
.OnDelete(DeleteBehavior.Cascade);
|
|
||||||
});
|
|
||||||
#pragma warning restore 612, 618
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -1,293 +0,0 @@
|
|||||||
// <auto-generated />
|
|
||||||
using System;
|
|
||||||
using DataLayer;
|
|
||||||
using Microsoft.EntityFrameworkCore;
|
|
||||||
using Microsoft.EntityFrameworkCore.Infrastructure;
|
|
||||||
using Microsoft.EntityFrameworkCore.Metadata;
|
|
||||||
using Microsoft.EntityFrameworkCore.Migrations;
|
|
||||||
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
|
|
||||||
|
|
||||||
namespace DataLayer.Migrations
|
|
||||||
{
|
|
||||||
[DbContext(typeof(LibationContext))]
|
|
||||||
[Migration("20190114191724_NullableCategory")]
|
|
||||||
partial class NullableCategory
|
|
||||||
{
|
|
||||||
protected override void BuildTargetModel(ModelBuilder modelBuilder)
|
|
||||||
{
|
|
||||||
#pragma warning disable 612, 618
|
|
||||||
modelBuilder
|
|
||||||
.HasAnnotation("ProductVersion", "2.2.0-rtm-35687")
|
|
||||||
.HasAnnotation("Relational:MaxIdentifierLength", 128)
|
|
||||||
.HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);
|
|
||||||
|
|
||||||
modelBuilder.Entity("DataLayer.Book", b =>
|
|
||||||
{
|
|
||||||
b.Property<int>("BookId")
|
|
||||||
.ValueGeneratedOnAdd()
|
|
||||||
.HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);
|
|
||||||
|
|
||||||
b.Property<string>("AudibleProductId");
|
|
||||||
|
|
||||||
b.Property<int?>("CategoryId");
|
|
||||||
|
|
||||||
b.Property<DateTime?>("DatePublished");
|
|
||||||
|
|
||||||
b.Property<string>("Description");
|
|
||||||
|
|
||||||
b.Property<bool>("HasBookDetails");
|
|
||||||
|
|
||||||
b.Property<bool>("IsAbridged");
|
|
||||||
|
|
||||||
b.Property<int>("LengthInMinutes");
|
|
||||||
|
|
||||||
b.Property<string>("PictureId");
|
|
||||||
|
|
||||||
b.Property<string>("Publisher");
|
|
||||||
|
|
||||||
b.Property<string>("Title");
|
|
||||||
|
|
||||||
b.HasKey("BookId");
|
|
||||||
|
|
||||||
b.HasIndex("AudibleProductId");
|
|
||||||
|
|
||||||
b.HasIndex("CategoryId");
|
|
||||||
|
|
||||||
b.ToTable("Books");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("DataLayer.BookContributor", b =>
|
|
||||||
{
|
|
||||||
b.Property<int>("BookId");
|
|
||||||
|
|
||||||
b.Property<int>("ContributorId");
|
|
||||||
|
|
||||||
b.Property<int>("Role");
|
|
||||||
|
|
||||||
b.Property<byte>("Order");
|
|
||||||
|
|
||||||
b.HasKey("BookId", "ContributorId", "Role");
|
|
||||||
|
|
||||||
b.HasIndex("BookId");
|
|
||||||
|
|
||||||
b.HasIndex("ContributorId");
|
|
||||||
|
|
||||||
b.ToTable("BookContributor");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("DataLayer.Category", b =>
|
|
||||||
{
|
|
||||||
b.Property<int>("CategoryId")
|
|
||||||
.ValueGeneratedOnAdd()
|
|
||||||
.HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);
|
|
||||||
|
|
||||||
b.Property<string>("AudibleCategoryId");
|
|
||||||
|
|
||||||
b.Property<string>("Name");
|
|
||||||
|
|
||||||
b.Property<int?>("ParentCategoryCategoryId");
|
|
||||||
|
|
||||||
b.HasKey("CategoryId");
|
|
||||||
|
|
||||||
b.HasIndex("AudibleCategoryId");
|
|
||||||
|
|
||||||
b.HasIndex("ParentCategoryCategoryId");
|
|
||||||
|
|
||||||
b.ToTable("Categories");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("DataLayer.Contributor", b =>
|
|
||||||
{
|
|
||||||
b.Property<int>("ContributorId")
|
|
||||||
.ValueGeneratedOnAdd()
|
|
||||||
.HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);
|
|
||||||
|
|
||||||
b.Property<string>("AudibleAuthorId");
|
|
||||||
|
|
||||||
b.Property<string>("Name");
|
|
||||||
|
|
||||||
b.HasKey("ContributorId");
|
|
||||||
|
|
||||||
b.HasIndex("Name");
|
|
||||||
|
|
||||||
b.ToTable("Contributors");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("DataLayer.LibraryBook", b =>
|
|
||||||
{
|
|
||||||
b.Property<int>("BookId");
|
|
||||||
|
|
||||||
b.Property<DateTime>("DateAdded");
|
|
||||||
|
|
||||||
b.Property<string>("DownloadBookLink");
|
|
||||||
|
|
||||||
b.HasKey("BookId");
|
|
||||||
|
|
||||||
b.ToTable("Library");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("DataLayer.Series", b =>
|
|
||||||
{
|
|
||||||
b.Property<int>("SeriesId")
|
|
||||||
.ValueGeneratedOnAdd()
|
|
||||||
.HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);
|
|
||||||
|
|
||||||
b.Property<string>("AudibleSeriesId");
|
|
||||||
|
|
||||||
b.Property<string>("Name");
|
|
||||||
|
|
||||||
b.HasKey("SeriesId");
|
|
||||||
|
|
||||||
b.HasIndex("AudibleSeriesId");
|
|
||||||
|
|
||||||
b.ToTable("Series");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("DataLayer.SeriesBook", b =>
|
|
||||||
{
|
|
||||||
b.Property<int>("SeriesId");
|
|
||||||
|
|
||||||
b.Property<int>("BookId");
|
|
||||||
|
|
||||||
b.Property<float?>("Index");
|
|
||||||
|
|
||||||
b.HasKey("SeriesId", "BookId");
|
|
||||||
|
|
||||||
b.HasIndex("BookId");
|
|
||||||
|
|
||||||
b.HasIndex("SeriesId");
|
|
||||||
|
|
||||||
b.ToTable("SeriesBook");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("DataLayer.Book", b =>
|
|
||||||
{
|
|
||||||
b.HasOne("DataLayer.Category", "Category")
|
|
||||||
.WithMany()
|
|
||||||
.HasForeignKey("CategoryId");
|
|
||||||
|
|
||||||
b.OwnsMany("DataLayer.Supplement", "Supplements", b1 =>
|
|
||||||
{
|
|
||||||
b1.Property<int>("SupplementId")
|
|
||||||
.ValueGeneratedOnAdd()
|
|
||||||
.HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);
|
|
||||||
|
|
||||||
b1.Property<int>("BookId");
|
|
||||||
|
|
||||||
b1.Property<string>("Url");
|
|
||||||
|
|
||||||
b1.HasKey("SupplementId");
|
|
||||||
|
|
||||||
b1.HasIndex("BookId");
|
|
||||||
|
|
||||||
b1.ToTable("Supplement");
|
|
||||||
|
|
||||||
b1.HasOne("DataLayer.Book", "Book")
|
|
||||||
.WithMany("Supplements")
|
|
||||||
.HasForeignKey("BookId")
|
|
||||||
.OnDelete(DeleteBehavior.Cascade);
|
|
||||||
});
|
|
||||||
|
|
||||||
b.OwnsOne("DataLayer.UserDefinedItem", "UserDefinedItem", b1 =>
|
|
||||||
{
|
|
||||||
b1.Property<int>("BookId");
|
|
||||||
|
|
||||||
b1.Property<string>("Tags");
|
|
||||||
|
|
||||||
b1.HasKey("BookId");
|
|
||||||
|
|
||||||
b1.ToTable("UserDefinedItem");
|
|
||||||
|
|
||||||
b1.HasOne("DataLayer.Book", "Book")
|
|
||||||
.WithOne("UserDefinedItem")
|
|
||||||
.HasForeignKey("DataLayer.UserDefinedItem", "BookId")
|
|
||||||
.OnDelete(DeleteBehavior.Cascade);
|
|
||||||
|
|
||||||
b1.OwnsOne("DataLayer.Rating", "Rating", b2 =>
|
|
||||||
{
|
|
||||||
b2.Property<int>("UserDefinedItemBookId");
|
|
||||||
|
|
||||||
b2.Property<float>("OverallRating");
|
|
||||||
|
|
||||||
b2.Property<float>("PerformanceRating");
|
|
||||||
|
|
||||||
b2.Property<float>("StoryRating");
|
|
||||||
|
|
||||||
b2.HasKey("UserDefinedItemBookId");
|
|
||||||
|
|
||||||
b2.ToTable("UserDefinedItem");
|
|
||||||
|
|
||||||
b2.HasOne("DataLayer.UserDefinedItem")
|
|
||||||
.WithOne("Rating")
|
|
||||||
.HasForeignKey("DataLayer.Rating", "UserDefinedItemBookId")
|
|
||||||
.OnDelete(DeleteBehavior.Cascade);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
b.OwnsOne("DataLayer.Rating", "Rating", b1 =>
|
|
||||||
{
|
|
||||||
b1.Property<int>("BookId")
|
|
||||||
.ValueGeneratedOnAdd()
|
|
||||||
.HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);
|
|
||||||
|
|
||||||
b1.Property<float>("OverallRating");
|
|
||||||
|
|
||||||
b1.Property<float>("PerformanceRating");
|
|
||||||
|
|
||||||
b1.Property<float>("StoryRating");
|
|
||||||
|
|
||||||
b1.HasKey("BookId");
|
|
||||||
|
|
||||||
b1.ToTable("Books");
|
|
||||||
|
|
||||||
b1.HasOne("DataLayer.Book")
|
|
||||||
.WithOne("Rating")
|
|
||||||
.HasForeignKey("DataLayer.Rating", "BookId")
|
|
||||||
.OnDelete(DeleteBehavior.Cascade);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("DataLayer.BookContributor", b =>
|
|
||||||
{
|
|
||||||
b.HasOne("DataLayer.Book", "Book")
|
|
||||||
.WithMany("ContributorsLink")
|
|
||||||
.HasForeignKey("BookId")
|
|
||||||
.OnDelete(DeleteBehavior.Cascade);
|
|
||||||
|
|
||||||
b.HasOne("DataLayer.Contributor", "Contributor")
|
|
||||||
.WithMany("BooksLink")
|
|
||||||
.HasForeignKey("ContributorId")
|
|
||||||
.OnDelete(DeleteBehavior.Cascade);
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("DataLayer.Category", b =>
|
|
||||||
{
|
|
||||||
b.HasOne("DataLayer.Category", "ParentCategory")
|
|
||||||
.WithMany()
|
|
||||||
.HasForeignKey("ParentCategoryCategoryId");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("DataLayer.LibraryBook", b =>
|
|
||||||
{
|
|
||||||
b.HasOne("DataLayer.Book", "Book")
|
|
||||||
.WithOne()
|
|
||||||
.HasForeignKey("DataLayer.LibraryBook", "BookId")
|
|
||||||
.OnDelete(DeleteBehavior.Cascade);
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("DataLayer.SeriesBook", b =>
|
|
||||||
{
|
|
||||||
b.HasOne("DataLayer.Book", "Book")
|
|
||||||
.WithMany("SeriesLink")
|
|
||||||
.HasForeignKey("BookId")
|
|
||||||
.OnDelete(DeleteBehavior.Cascade);
|
|
||||||
|
|
||||||
b.HasOne("DataLayer.Series", "Series")
|
|
||||||
.WithMany("BooksLink")
|
|
||||||
.HasForeignKey("SeriesId")
|
|
||||||
.OnDelete(DeleteBehavior.Cascade);
|
|
||||||
});
|
|
||||||
#pragma warning restore 612, 618
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -1,50 +0,0 @@
|
|||||||
using Microsoft.EntityFrameworkCore.Migrations;
|
|
||||||
|
|
||||||
namespace DataLayer.Migrations
|
|
||||||
{
|
|
||||||
public partial class NullableCategory : Migration
|
|
||||||
{
|
|
||||||
protected override void Up(MigrationBuilder migrationBuilder)
|
|
||||||
{
|
|
||||||
migrationBuilder.DropForeignKey(
|
|
||||||
name: "FK_Books_Categories_CategoryId",
|
|
||||||
table: "Books");
|
|
||||||
|
|
||||||
migrationBuilder.AlterColumn<int>(
|
|
||||||
name: "CategoryId",
|
|
||||||
table: "Books",
|
|
||||||
nullable: true,
|
|
||||||
oldClrType: typeof(int));
|
|
||||||
|
|
||||||
migrationBuilder.AddForeignKey(
|
|
||||||
name: "FK_Books_Categories_CategoryId",
|
|
||||||
table: "Books",
|
|
||||||
column: "CategoryId",
|
|
||||||
principalTable: "Categories",
|
|
||||||
principalColumn: "CategoryId",
|
|
||||||
onDelete: ReferentialAction.Restrict);
|
|
||||||
}
|
|
||||||
|
|
||||||
protected override void Down(MigrationBuilder migrationBuilder)
|
|
||||||
{
|
|
||||||
migrationBuilder.DropForeignKey(
|
|
||||||
name: "FK_Books_Categories_CategoryId",
|
|
||||||
table: "Books");
|
|
||||||
|
|
||||||
migrationBuilder.AlterColumn<int>(
|
|
||||||
name: "CategoryId",
|
|
||||||
table: "Books",
|
|
||||||
nullable: false,
|
|
||||||
oldClrType: typeof(int),
|
|
||||||
oldNullable: true);
|
|
||||||
|
|
||||||
migrationBuilder.AddForeignKey(
|
|
||||||
name: "FK_Books_Categories_CategoryId",
|
|
||||||
table: "Books",
|
|
||||||
column: "CategoryId",
|
|
||||||
principalTable: "Categories",
|
|
||||||
principalColumn: "CategoryId",
|
|
||||||
onDelete: ReferentialAction.Cascade);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -1,293 +0,0 @@
|
|||||||
// <auto-generated />
|
|
||||||
using System;
|
|
||||||
using DataLayer;
|
|
||||||
using Microsoft.EntityFrameworkCore;
|
|
||||||
using Microsoft.EntityFrameworkCore.Infrastructure;
|
|
||||||
using Microsoft.EntityFrameworkCore.Metadata;
|
|
||||||
using Microsoft.EntityFrameworkCore.Migrations;
|
|
||||||
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
|
|
||||||
|
|
||||||
namespace DataLayer.Migrations
|
|
||||||
{
|
|
||||||
[DbContext(typeof(LibationContext))]
|
|
||||||
[Migration("20190124190012_NullCategory")]
|
|
||||||
partial class NullCategory
|
|
||||||
{
|
|
||||||
protected override void BuildTargetModel(ModelBuilder modelBuilder)
|
|
||||||
{
|
|
||||||
#pragma warning disable 612, 618
|
|
||||||
modelBuilder
|
|
||||||
.HasAnnotation("ProductVersion", "2.2.0-rtm-35687")
|
|
||||||
.HasAnnotation("Relational:MaxIdentifierLength", 128)
|
|
||||||
.HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);
|
|
||||||
|
|
||||||
modelBuilder.Entity("DataLayer.Book", b =>
|
|
||||||
{
|
|
||||||
b.Property<int>("BookId")
|
|
||||||
.ValueGeneratedOnAdd()
|
|
||||||
.HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);
|
|
||||||
|
|
||||||
b.Property<string>("AudibleProductId");
|
|
||||||
|
|
||||||
b.Property<int?>("CategoryId");
|
|
||||||
|
|
||||||
b.Property<DateTime?>("DatePublished");
|
|
||||||
|
|
||||||
b.Property<string>("Description");
|
|
||||||
|
|
||||||
b.Property<bool>("HasBookDetails");
|
|
||||||
|
|
||||||
b.Property<bool>("IsAbridged");
|
|
||||||
|
|
||||||
b.Property<int>("LengthInMinutes");
|
|
||||||
|
|
||||||
b.Property<string>("PictureId");
|
|
||||||
|
|
||||||
b.Property<string>("Publisher");
|
|
||||||
|
|
||||||
b.Property<string>("Title");
|
|
||||||
|
|
||||||
b.HasKey("BookId");
|
|
||||||
|
|
||||||
b.HasIndex("AudibleProductId");
|
|
||||||
|
|
||||||
b.HasIndex("CategoryId");
|
|
||||||
|
|
||||||
b.ToTable("Books");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("DataLayer.BookContributor", b =>
|
|
||||||
{
|
|
||||||
b.Property<int>("BookId");
|
|
||||||
|
|
||||||
b.Property<int>("ContributorId");
|
|
||||||
|
|
||||||
b.Property<int>("Role");
|
|
||||||
|
|
||||||
b.Property<byte>("Order");
|
|
||||||
|
|
||||||
b.HasKey("BookId", "ContributorId", "Role");
|
|
||||||
|
|
||||||
b.HasIndex("BookId");
|
|
||||||
|
|
||||||
b.HasIndex("ContributorId");
|
|
||||||
|
|
||||||
b.ToTable("BookContributor");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("DataLayer.Category", b =>
|
|
||||||
{
|
|
||||||
b.Property<int>("CategoryId")
|
|
||||||
.ValueGeneratedOnAdd()
|
|
||||||
.HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);
|
|
||||||
|
|
||||||
b.Property<string>("AudibleCategoryId");
|
|
||||||
|
|
||||||
b.Property<string>("Name");
|
|
||||||
|
|
||||||
b.Property<int?>("ParentCategoryCategoryId");
|
|
||||||
|
|
||||||
b.HasKey("CategoryId");
|
|
||||||
|
|
||||||
b.HasIndex("AudibleCategoryId");
|
|
||||||
|
|
||||||
b.HasIndex("ParentCategoryCategoryId");
|
|
||||||
|
|
||||||
b.ToTable("Categories");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("DataLayer.Contributor", b =>
|
|
||||||
{
|
|
||||||
b.Property<int>("ContributorId")
|
|
||||||
.ValueGeneratedOnAdd()
|
|
||||||
.HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);
|
|
||||||
|
|
||||||
b.Property<string>("AudibleAuthorId");
|
|
||||||
|
|
||||||
b.Property<string>("Name");
|
|
||||||
|
|
||||||
b.HasKey("ContributorId");
|
|
||||||
|
|
||||||
b.HasIndex("Name");
|
|
||||||
|
|
||||||
b.ToTable("Contributors");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("DataLayer.LibraryBook", b =>
|
|
||||||
{
|
|
||||||
b.Property<int>("BookId");
|
|
||||||
|
|
||||||
b.Property<DateTime>("DateAdded");
|
|
||||||
|
|
||||||
b.Property<string>("DownloadBookLink");
|
|
||||||
|
|
||||||
b.HasKey("BookId");
|
|
||||||
|
|
||||||
b.ToTable("Library");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("DataLayer.Series", b =>
|
|
||||||
{
|
|
||||||
b.Property<int>("SeriesId")
|
|
||||||
.ValueGeneratedOnAdd()
|
|
||||||
.HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);
|
|
||||||
|
|
||||||
b.Property<string>("AudibleSeriesId");
|
|
||||||
|
|
||||||
b.Property<string>("Name");
|
|
||||||
|
|
||||||
b.HasKey("SeriesId");
|
|
||||||
|
|
||||||
b.HasIndex("AudibleSeriesId");
|
|
||||||
|
|
||||||
b.ToTable("Series");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("DataLayer.SeriesBook", b =>
|
|
||||||
{
|
|
||||||
b.Property<int>("SeriesId");
|
|
||||||
|
|
||||||
b.Property<int>("BookId");
|
|
||||||
|
|
||||||
b.Property<float?>("Index");
|
|
||||||
|
|
||||||
b.HasKey("SeriesId", "BookId");
|
|
||||||
|
|
||||||
b.HasIndex("BookId");
|
|
||||||
|
|
||||||
b.HasIndex("SeriesId");
|
|
||||||
|
|
||||||
b.ToTable("SeriesBook");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("DataLayer.Book", b =>
|
|
||||||
{
|
|
||||||
b.HasOne("DataLayer.Category", "Category")
|
|
||||||
.WithMany()
|
|
||||||
.HasForeignKey("CategoryId");
|
|
||||||
|
|
||||||
b.OwnsMany("DataLayer.Supplement", "Supplements", b1 =>
|
|
||||||
{
|
|
||||||
b1.Property<int>("SupplementId")
|
|
||||||
.ValueGeneratedOnAdd()
|
|
||||||
.HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);
|
|
||||||
|
|
||||||
b1.Property<int>("BookId");
|
|
||||||
|
|
||||||
b1.Property<string>("Url");
|
|
||||||
|
|
||||||
b1.HasKey("SupplementId");
|
|
||||||
|
|
||||||
b1.HasIndex("BookId");
|
|
||||||
|
|
||||||
b1.ToTable("Supplement");
|
|
||||||
|
|
||||||
b1.HasOne("DataLayer.Book", "Book")
|
|
||||||
.WithMany("Supplements")
|
|
||||||
.HasForeignKey("BookId")
|
|
||||||
.OnDelete(DeleteBehavior.Cascade);
|
|
||||||
});
|
|
||||||
|
|
||||||
b.OwnsOne("DataLayer.UserDefinedItem", "UserDefinedItem", b1 =>
|
|
||||||
{
|
|
||||||
b1.Property<int>("BookId");
|
|
||||||
|
|
||||||
b1.Property<string>("Tags");
|
|
||||||
|
|
||||||
b1.HasKey("BookId");
|
|
||||||
|
|
||||||
b1.ToTable("UserDefinedItem");
|
|
||||||
|
|
||||||
b1.HasOne("DataLayer.Book", "Book")
|
|
||||||
.WithOne("UserDefinedItem")
|
|
||||||
.HasForeignKey("DataLayer.UserDefinedItem", "BookId")
|
|
||||||
.OnDelete(DeleteBehavior.Cascade);
|
|
||||||
|
|
||||||
b1.OwnsOne("DataLayer.Rating", "Rating", b2 =>
|
|
||||||
{
|
|
||||||
b2.Property<int>("UserDefinedItemBookId");
|
|
||||||
|
|
||||||
b2.Property<float>("OverallRating");
|
|
||||||
|
|
||||||
b2.Property<float>("PerformanceRating");
|
|
||||||
|
|
||||||
b2.Property<float>("StoryRating");
|
|
||||||
|
|
||||||
b2.HasKey("UserDefinedItemBookId");
|
|
||||||
|
|
||||||
b2.ToTable("UserDefinedItem");
|
|
||||||
|
|
||||||
b2.HasOne("DataLayer.UserDefinedItem")
|
|
||||||
.WithOne("Rating")
|
|
||||||
.HasForeignKey("DataLayer.Rating", "UserDefinedItemBookId")
|
|
||||||
.OnDelete(DeleteBehavior.Cascade);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
b.OwnsOne("DataLayer.Rating", "Rating", b1 =>
|
|
||||||
{
|
|
||||||
b1.Property<int>("BookId")
|
|
||||||
.ValueGeneratedOnAdd()
|
|
||||||
.HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);
|
|
||||||
|
|
||||||
b1.Property<float>("OverallRating");
|
|
||||||
|
|
||||||
b1.Property<float>("PerformanceRating");
|
|
||||||
|
|
||||||
b1.Property<float>("StoryRating");
|
|
||||||
|
|
||||||
b1.HasKey("BookId");
|
|
||||||
|
|
||||||
b1.ToTable("Books");
|
|
||||||
|
|
||||||
b1.HasOne("DataLayer.Book")
|
|
||||||
.WithOne("Rating")
|
|
||||||
.HasForeignKey("DataLayer.Rating", "BookId")
|
|
||||||
.OnDelete(DeleteBehavior.Cascade);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("DataLayer.BookContributor", b =>
|
|
||||||
{
|
|
||||||
b.HasOne("DataLayer.Book", "Book")
|
|
||||||
.WithMany("ContributorsLink")
|
|
||||||
.HasForeignKey("BookId")
|
|
||||||
.OnDelete(DeleteBehavior.Cascade);
|
|
||||||
|
|
||||||
b.HasOne("DataLayer.Contributor", "Contributor")
|
|
||||||
.WithMany("BooksLink")
|
|
||||||
.HasForeignKey("ContributorId")
|
|
||||||
.OnDelete(DeleteBehavior.Cascade);
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("DataLayer.Category", b =>
|
|
||||||
{
|
|
||||||
b.HasOne("DataLayer.Category", "ParentCategory")
|
|
||||||
.WithMany()
|
|
||||||
.HasForeignKey("ParentCategoryCategoryId");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("DataLayer.LibraryBook", b =>
|
|
||||||
{
|
|
||||||
b.HasOne("DataLayer.Book", "Book")
|
|
||||||
.WithOne()
|
|
||||||
.HasForeignKey("DataLayer.LibraryBook", "BookId")
|
|
||||||
.OnDelete(DeleteBehavior.Cascade);
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("DataLayer.SeriesBook", b =>
|
|
||||||
{
|
|
||||||
b.HasOne("DataLayer.Book", "Book")
|
|
||||||
.WithMany("SeriesLink")
|
|
||||||
.HasForeignKey("BookId")
|
|
||||||
.OnDelete(DeleteBehavior.Cascade);
|
|
||||||
|
|
||||||
b.HasOne("DataLayer.Series", "Series")
|
|
||||||
.WithMany("BooksLink")
|
|
||||||
.HasForeignKey("SeriesId")
|
|
||||||
.OnDelete(DeleteBehavior.Cascade);
|
|
||||||
});
|
|
||||||
#pragma warning restore 612, 618
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -1,17 +0,0 @@
|
|||||||
using Microsoft.EntityFrameworkCore.Migrations;
|
|
||||||
|
|
||||||
namespace DataLayer.Migrations
|
|
||||||
{
|
|
||||||
public partial class NullCategory : Migration
|
|
||||||
{
|
|
||||||
protected override void Up(MigrationBuilder migrationBuilder)
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
protected override void Down(MigrationBuilder migrationBuilder)
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -1,294 +0,0 @@
|
|||||||
// <auto-generated />
|
|
||||||
using System;
|
|
||||||
using DataLayer;
|
|
||||||
using Microsoft.EntityFrameworkCore;
|
|
||||||
using Microsoft.EntityFrameworkCore.Infrastructure;
|
|
||||||
using Microsoft.EntityFrameworkCore.Metadata;
|
|
||||||
using Microsoft.EntityFrameworkCore.Migrations;
|
|
||||||
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
|
|
||||||
|
|
||||||
namespace DataLayer.Migrations
|
|
||||||
{
|
|
||||||
[DbContext(typeof(LibationContext))]
|
|
||||||
[Migration("20190124190057_NonNullCategory")]
|
|
||||||
partial class NonNullCategory
|
|
||||||
{
|
|
||||||
protected override void BuildTargetModel(ModelBuilder modelBuilder)
|
|
||||||
{
|
|
||||||
#pragma warning disable 612, 618
|
|
||||||
modelBuilder
|
|
||||||
.HasAnnotation("ProductVersion", "2.2.0-rtm-35687")
|
|
||||||
.HasAnnotation("Relational:MaxIdentifierLength", 128)
|
|
||||||
.HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);
|
|
||||||
|
|
||||||
modelBuilder.Entity("DataLayer.Book", b =>
|
|
||||||
{
|
|
||||||
b.Property<int>("BookId")
|
|
||||||
.ValueGeneratedOnAdd()
|
|
||||||
.HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);
|
|
||||||
|
|
||||||
b.Property<string>("AudibleProductId");
|
|
||||||
|
|
||||||
b.Property<int>("CategoryId");
|
|
||||||
|
|
||||||
b.Property<DateTime?>("DatePublished");
|
|
||||||
|
|
||||||
b.Property<string>("Description");
|
|
||||||
|
|
||||||
b.Property<bool>("HasBookDetails");
|
|
||||||
|
|
||||||
b.Property<bool>("IsAbridged");
|
|
||||||
|
|
||||||
b.Property<int>("LengthInMinutes");
|
|
||||||
|
|
||||||
b.Property<string>("PictureId");
|
|
||||||
|
|
||||||
b.Property<string>("Publisher");
|
|
||||||
|
|
||||||
b.Property<string>("Title");
|
|
||||||
|
|
||||||
b.HasKey("BookId");
|
|
||||||
|
|
||||||
b.HasIndex("AudibleProductId");
|
|
||||||
|
|
||||||
b.HasIndex("CategoryId");
|
|
||||||
|
|
||||||
b.ToTable("Books");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("DataLayer.BookContributor", b =>
|
|
||||||
{
|
|
||||||
b.Property<int>("BookId");
|
|
||||||
|
|
||||||
b.Property<int>("ContributorId");
|
|
||||||
|
|
||||||
b.Property<int>("Role");
|
|
||||||
|
|
||||||
b.Property<byte>("Order");
|
|
||||||
|
|
||||||
b.HasKey("BookId", "ContributorId", "Role");
|
|
||||||
|
|
||||||
b.HasIndex("BookId");
|
|
||||||
|
|
||||||
b.HasIndex("ContributorId");
|
|
||||||
|
|
||||||
b.ToTable("BookContributor");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("DataLayer.Category", b =>
|
|
||||||
{
|
|
||||||
b.Property<int>("CategoryId")
|
|
||||||
.ValueGeneratedOnAdd()
|
|
||||||
.HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);
|
|
||||||
|
|
||||||
b.Property<string>("AudibleCategoryId");
|
|
||||||
|
|
||||||
b.Property<string>("Name");
|
|
||||||
|
|
||||||
b.Property<int?>("ParentCategoryCategoryId");
|
|
||||||
|
|
||||||
b.HasKey("CategoryId");
|
|
||||||
|
|
||||||
b.HasIndex("AudibleCategoryId");
|
|
||||||
|
|
||||||
b.HasIndex("ParentCategoryCategoryId");
|
|
||||||
|
|
||||||
b.ToTable("Categories");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("DataLayer.Contributor", b =>
|
|
||||||
{
|
|
||||||
b.Property<int>("ContributorId")
|
|
||||||
.ValueGeneratedOnAdd()
|
|
||||||
.HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);
|
|
||||||
|
|
||||||
b.Property<string>("AudibleAuthorId");
|
|
||||||
|
|
||||||
b.Property<string>("Name");
|
|
||||||
|
|
||||||
b.HasKey("ContributorId");
|
|
||||||
|
|
||||||
b.HasIndex("Name");
|
|
||||||
|
|
||||||
b.ToTable("Contributors");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("DataLayer.LibraryBook", b =>
|
|
||||||
{
|
|
||||||
b.Property<int>("BookId");
|
|
||||||
|
|
||||||
b.Property<DateTime>("DateAdded");
|
|
||||||
|
|
||||||
b.Property<string>("DownloadBookLink");
|
|
||||||
|
|
||||||
b.HasKey("BookId");
|
|
||||||
|
|
||||||
b.ToTable("Library");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("DataLayer.Series", b =>
|
|
||||||
{
|
|
||||||
b.Property<int>("SeriesId")
|
|
||||||
.ValueGeneratedOnAdd()
|
|
||||||
.HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);
|
|
||||||
|
|
||||||
b.Property<string>("AudibleSeriesId");
|
|
||||||
|
|
||||||
b.Property<string>("Name");
|
|
||||||
|
|
||||||
b.HasKey("SeriesId");
|
|
||||||
|
|
||||||
b.HasIndex("AudibleSeriesId");
|
|
||||||
|
|
||||||
b.ToTable("Series");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("DataLayer.SeriesBook", b =>
|
|
||||||
{
|
|
||||||
b.Property<int>("SeriesId");
|
|
||||||
|
|
||||||
b.Property<int>("BookId");
|
|
||||||
|
|
||||||
b.Property<float?>("Index");
|
|
||||||
|
|
||||||
b.HasKey("SeriesId", "BookId");
|
|
||||||
|
|
||||||
b.HasIndex("BookId");
|
|
||||||
|
|
||||||
b.HasIndex("SeriesId");
|
|
||||||
|
|
||||||
b.ToTable("SeriesBook");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("DataLayer.Book", b =>
|
|
||||||
{
|
|
||||||
b.HasOne("DataLayer.Category", "Category")
|
|
||||||
.WithMany()
|
|
||||||
.HasForeignKey("CategoryId")
|
|
||||||
.OnDelete(DeleteBehavior.Cascade);
|
|
||||||
|
|
||||||
b.OwnsMany("DataLayer.Supplement", "Supplements", b1 =>
|
|
||||||
{
|
|
||||||
b1.Property<int>("SupplementId")
|
|
||||||
.ValueGeneratedOnAdd()
|
|
||||||
.HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);
|
|
||||||
|
|
||||||
b1.Property<int>("BookId");
|
|
||||||
|
|
||||||
b1.Property<string>("Url");
|
|
||||||
|
|
||||||
b1.HasKey("SupplementId");
|
|
||||||
|
|
||||||
b1.HasIndex("BookId");
|
|
||||||
|
|
||||||
b1.ToTable("Supplement");
|
|
||||||
|
|
||||||
b1.HasOne("DataLayer.Book", "Book")
|
|
||||||
.WithMany("Supplements")
|
|
||||||
.HasForeignKey("BookId")
|
|
||||||
.OnDelete(DeleteBehavior.Cascade);
|
|
||||||
});
|
|
||||||
|
|
||||||
b.OwnsOne("DataLayer.UserDefinedItem", "UserDefinedItem", b1 =>
|
|
||||||
{
|
|
||||||
b1.Property<int>("BookId");
|
|
||||||
|
|
||||||
b1.Property<string>("Tags");
|
|
||||||
|
|
||||||
b1.HasKey("BookId");
|
|
||||||
|
|
||||||
b1.ToTable("UserDefinedItem");
|
|
||||||
|
|
||||||
b1.HasOne("DataLayer.Book", "Book")
|
|
||||||
.WithOne("UserDefinedItem")
|
|
||||||
.HasForeignKey("DataLayer.UserDefinedItem", "BookId")
|
|
||||||
.OnDelete(DeleteBehavior.Cascade);
|
|
||||||
|
|
||||||
b1.OwnsOne("DataLayer.Rating", "Rating", b2 =>
|
|
||||||
{
|
|
||||||
b2.Property<int>("UserDefinedItemBookId");
|
|
||||||
|
|
||||||
b2.Property<float>("OverallRating");
|
|
||||||
|
|
||||||
b2.Property<float>("PerformanceRating");
|
|
||||||
|
|
||||||
b2.Property<float>("StoryRating");
|
|
||||||
|
|
||||||
b2.HasKey("UserDefinedItemBookId");
|
|
||||||
|
|
||||||
b2.ToTable("UserDefinedItem");
|
|
||||||
|
|
||||||
b2.HasOne("DataLayer.UserDefinedItem")
|
|
||||||
.WithOne("Rating")
|
|
||||||
.HasForeignKey("DataLayer.Rating", "UserDefinedItemBookId")
|
|
||||||
.OnDelete(DeleteBehavior.Cascade);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
b.OwnsOne("DataLayer.Rating", "Rating", b1 =>
|
|
||||||
{
|
|
||||||
b1.Property<int>("BookId")
|
|
||||||
.ValueGeneratedOnAdd()
|
|
||||||
.HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);
|
|
||||||
|
|
||||||
b1.Property<float>("OverallRating");
|
|
||||||
|
|
||||||
b1.Property<float>("PerformanceRating");
|
|
||||||
|
|
||||||
b1.Property<float>("StoryRating");
|
|
||||||
|
|
||||||
b1.HasKey("BookId");
|
|
||||||
|
|
||||||
b1.ToTable("Books");
|
|
||||||
|
|
||||||
b1.HasOne("DataLayer.Book")
|
|
||||||
.WithOne("Rating")
|
|
||||||
.HasForeignKey("DataLayer.Rating", "BookId")
|
|
||||||
.OnDelete(DeleteBehavior.Cascade);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("DataLayer.BookContributor", b =>
|
|
||||||
{
|
|
||||||
b.HasOne("DataLayer.Book", "Book")
|
|
||||||
.WithMany("ContributorsLink")
|
|
||||||
.HasForeignKey("BookId")
|
|
||||||
.OnDelete(DeleteBehavior.Cascade);
|
|
||||||
|
|
||||||
b.HasOne("DataLayer.Contributor", "Contributor")
|
|
||||||
.WithMany("BooksLink")
|
|
||||||
.HasForeignKey("ContributorId")
|
|
||||||
.OnDelete(DeleteBehavior.Cascade);
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("DataLayer.Category", b =>
|
|
||||||
{
|
|
||||||
b.HasOne("DataLayer.Category", "ParentCategory")
|
|
||||||
.WithMany()
|
|
||||||
.HasForeignKey("ParentCategoryCategoryId");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("DataLayer.LibraryBook", b =>
|
|
||||||
{
|
|
||||||
b.HasOne("DataLayer.Book", "Book")
|
|
||||||
.WithOne()
|
|
||||||
.HasForeignKey("DataLayer.LibraryBook", "BookId")
|
|
||||||
.OnDelete(DeleteBehavior.Cascade);
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("DataLayer.SeriesBook", b =>
|
|
||||||
{
|
|
||||||
b.HasOne("DataLayer.Book", "Book")
|
|
||||||
.WithMany("SeriesLink")
|
|
||||||
.HasForeignKey("BookId")
|
|
||||||
.OnDelete(DeleteBehavior.Cascade);
|
|
||||||
|
|
||||||
b.HasOne("DataLayer.Series", "Series")
|
|
||||||
.WithMany("BooksLink")
|
|
||||||
.HasForeignKey("SeriesId")
|
|
||||||
.OnDelete(DeleteBehavior.Cascade);
|
|
||||||
});
|
|
||||||
#pragma warning restore 612, 618
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -1,50 +0,0 @@
|
|||||||
using Microsoft.EntityFrameworkCore.Migrations;
|
|
||||||
|
|
||||||
namespace DataLayer.Migrations
|
|
||||||
{
|
|
||||||
public partial class NonNullCategory : Migration
|
|
||||||
{
|
|
||||||
protected override void Up(MigrationBuilder migrationBuilder)
|
|
||||||
{
|
|
||||||
migrationBuilder.DropForeignKey(
|
|
||||||
name: "FK_Books_Categories_CategoryId",
|
|
||||||
table: "Books");
|
|
||||||
|
|
||||||
migrationBuilder.AlterColumn<int>(
|
|
||||||
name: "CategoryId",
|
|
||||||
table: "Books",
|
|
||||||
nullable: false,
|
|
||||||
oldClrType: typeof(int),
|
|
||||||
oldNullable: true);
|
|
||||||
|
|
||||||
migrationBuilder.AddForeignKey(
|
|
||||||
name: "FK_Books_Categories_CategoryId",
|
|
||||||
table: "Books",
|
|
||||||
column: "CategoryId",
|
|
||||||
principalTable: "Categories",
|
|
||||||
principalColumn: "CategoryId",
|
|
||||||
onDelete: ReferentialAction.Cascade);
|
|
||||||
}
|
|
||||||
|
|
||||||
protected override void Down(MigrationBuilder migrationBuilder)
|
|
||||||
{
|
|
||||||
migrationBuilder.DropForeignKey(
|
|
||||||
name: "FK_Books_Categories_CategoryId",
|
|
||||||
table: "Books");
|
|
||||||
|
|
||||||
migrationBuilder.AlterColumn<int>(
|
|
||||||
name: "CategoryId",
|
|
||||||
table: "Books",
|
|
||||||
nullable: true,
|
|
||||||
oldClrType: typeof(int));
|
|
||||||
|
|
||||||
migrationBuilder.AddForeignKey(
|
|
||||||
name: "FK_Books_Categories_CategoryId",
|
|
||||||
table: "Books",
|
|
||||||
column: "CategoryId",
|
|
||||||
principalTable: "Categories",
|
|
||||||
principalColumn: "CategoryId",
|
|
||||||
onDelete: ReferentialAction.Restrict);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -1,23 +0,0 @@
|
|||||||
using Microsoft.EntityFrameworkCore.Migrations;
|
|
||||||
|
|
||||||
namespace DataLayer.Migrations
|
|
||||||
{
|
|
||||||
public partial class EmptyCategorySeed : Migration
|
|
||||||
{
|
|
||||||
protected override void Up(MigrationBuilder migrationBuilder)
|
|
||||||
{
|
|
||||||
migrationBuilder.InsertData(
|
|
||||||
table: "Categories",
|
|
||||||
columns: new[] { "CategoryId", "AudibleCategoryId", "Name", "ParentCategoryCategoryId" },
|
|
||||||
values: new object[] { -1, "", "", null });
|
|
||||||
}
|
|
||||||
|
|
||||||
protected override void Down(MigrationBuilder migrationBuilder)
|
|
||||||
{
|
|
||||||
migrationBuilder.DeleteData(
|
|
||||||
table: "Categories",
|
|
||||||
keyColumn: "CategoryId",
|
|
||||||
keyValue: -1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -1,300 +0,0 @@
|
|||||||
// <auto-generated />
|
|
||||||
using System;
|
|
||||||
using DataLayer;
|
|
||||||
using Microsoft.EntityFrameworkCore;
|
|
||||||
using Microsoft.EntityFrameworkCore.Infrastructure;
|
|
||||||
using Microsoft.EntityFrameworkCore.Metadata;
|
|
||||||
using Microsoft.EntityFrameworkCore.Migrations;
|
|
||||||
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
|
|
||||||
|
|
||||||
namespace DataLayer.Migrations
|
|
||||||
{
|
|
||||||
[DbContext(typeof(LibationContext))]
|
|
||||||
[Migration("20190124214317_PublisherContrib")]
|
|
||||||
partial class PublisherContrib
|
|
||||||
{
|
|
||||||
protected override void BuildTargetModel(ModelBuilder modelBuilder)
|
|
||||||
{
|
|
||||||
#pragma warning disable 612, 618
|
|
||||||
modelBuilder
|
|
||||||
.HasAnnotation("ProductVersion", "2.2.0-rtm-35687")
|
|
||||||
.HasAnnotation("Relational:MaxIdentifierLength", 128)
|
|
||||||
.HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);
|
|
||||||
|
|
||||||
modelBuilder.Entity("DataLayer.Book", b =>
|
|
||||||
{
|
|
||||||
b.Property<int>("BookId")
|
|
||||||
.ValueGeneratedOnAdd()
|
|
||||||
.HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);
|
|
||||||
|
|
||||||
b.Property<string>("AudibleProductId");
|
|
||||||
|
|
||||||
b.Property<int>("CategoryId");
|
|
||||||
|
|
||||||
b.Property<DateTime?>("DatePublished");
|
|
||||||
|
|
||||||
b.Property<string>("Description");
|
|
||||||
|
|
||||||
b.Property<bool>("HasBookDetails");
|
|
||||||
|
|
||||||
b.Property<bool>("IsAbridged");
|
|
||||||
|
|
||||||
b.Property<int>("LengthInMinutes");
|
|
||||||
|
|
||||||
b.Property<string>("PictureId");
|
|
||||||
|
|
||||||
b.Property<string>("Title");
|
|
||||||
|
|
||||||
b.HasKey("BookId");
|
|
||||||
|
|
||||||
b.HasIndex("AudibleProductId");
|
|
||||||
|
|
||||||
b.HasIndex("CategoryId");
|
|
||||||
|
|
||||||
b.ToTable("Books");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("DataLayer.BookContributor", b =>
|
|
||||||
{
|
|
||||||
b.Property<int>("BookId");
|
|
||||||
|
|
||||||
b.Property<int>("ContributorId");
|
|
||||||
|
|
||||||
b.Property<int>("Role");
|
|
||||||
|
|
||||||
b.Property<byte>("Order");
|
|
||||||
|
|
||||||
b.HasKey("BookId", "ContributorId", "Role");
|
|
||||||
|
|
||||||
b.HasIndex("BookId");
|
|
||||||
|
|
||||||
b.HasIndex("ContributorId");
|
|
||||||
|
|
||||||
b.ToTable("BookContributor");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("DataLayer.Category", b =>
|
|
||||||
{
|
|
||||||
b.Property<int>("CategoryId")
|
|
||||||
.ValueGeneratedOnAdd()
|
|
||||||
.HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);
|
|
||||||
|
|
||||||
b.Property<string>("AudibleCategoryId");
|
|
||||||
|
|
||||||
b.Property<string>("Name");
|
|
||||||
|
|
||||||
b.Property<int?>("ParentCategoryCategoryId");
|
|
||||||
|
|
||||||
b.HasKey("CategoryId");
|
|
||||||
|
|
||||||
b.HasIndex("AudibleCategoryId");
|
|
||||||
|
|
||||||
b.HasIndex("ParentCategoryCategoryId");
|
|
||||||
|
|
||||||
b.ToTable("Categories");
|
|
||||||
|
|
||||||
b.HasData(
|
|
||||||
new
|
|
||||||
{
|
|
||||||
CategoryId = -1,
|
|
||||||
AudibleCategoryId = "",
|
|
||||||
Name = ""
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("DataLayer.Contributor", b =>
|
|
||||||
{
|
|
||||||
b.Property<int>("ContributorId")
|
|
||||||
.ValueGeneratedOnAdd()
|
|
||||||
.HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);
|
|
||||||
|
|
||||||
b.Property<string>("AudibleAuthorId");
|
|
||||||
|
|
||||||
b.Property<string>("Name");
|
|
||||||
|
|
||||||
b.HasKey("ContributorId");
|
|
||||||
|
|
||||||
b.HasIndex("Name");
|
|
||||||
|
|
||||||
b.ToTable("Contributors");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("DataLayer.LibraryBook", b =>
|
|
||||||
{
|
|
||||||
b.Property<int>("BookId");
|
|
||||||
|
|
||||||
b.Property<DateTime>("DateAdded");
|
|
||||||
|
|
||||||
b.Property<string>("DownloadBookLink");
|
|
||||||
|
|
||||||
b.HasKey("BookId");
|
|
||||||
|
|
||||||
b.ToTable("Library");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("DataLayer.Series", b =>
|
|
||||||
{
|
|
||||||
b.Property<int>("SeriesId")
|
|
||||||
.ValueGeneratedOnAdd()
|
|
||||||
.HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);
|
|
||||||
|
|
||||||
b.Property<string>("AudibleSeriesId");
|
|
||||||
|
|
||||||
b.Property<string>("Name");
|
|
||||||
|
|
||||||
b.HasKey("SeriesId");
|
|
||||||
|
|
||||||
b.HasIndex("AudibleSeriesId");
|
|
||||||
|
|
||||||
b.ToTable("Series");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("DataLayer.SeriesBook", b =>
|
|
||||||
{
|
|
||||||
b.Property<int>("SeriesId");
|
|
||||||
|
|
||||||
b.Property<int>("BookId");
|
|
||||||
|
|
||||||
b.Property<float?>("Index");
|
|
||||||
|
|
||||||
b.HasKey("SeriesId", "BookId");
|
|
||||||
|
|
||||||
b.HasIndex("BookId");
|
|
||||||
|
|
||||||
b.HasIndex("SeriesId");
|
|
||||||
|
|
||||||
b.ToTable("SeriesBook");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("DataLayer.Book", b =>
|
|
||||||
{
|
|
||||||
b.HasOne("DataLayer.Category", "Category")
|
|
||||||
.WithMany()
|
|
||||||
.HasForeignKey("CategoryId")
|
|
||||||
.OnDelete(DeleteBehavior.Cascade);
|
|
||||||
|
|
||||||
b.OwnsMany("DataLayer.Supplement", "Supplements", b1 =>
|
|
||||||
{
|
|
||||||
b1.Property<int>("SupplementId")
|
|
||||||
.ValueGeneratedOnAdd()
|
|
||||||
.HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);
|
|
||||||
|
|
||||||
b1.Property<int>("BookId");
|
|
||||||
|
|
||||||
b1.Property<string>("Url");
|
|
||||||
|
|
||||||
b1.HasKey("SupplementId");
|
|
||||||
|
|
||||||
b1.HasIndex("BookId");
|
|
||||||
|
|
||||||
b1.ToTable("Supplement");
|
|
||||||
|
|
||||||
b1.HasOne("DataLayer.Book", "Book")
|
|
||||||
.WithMany("Supplements")
|
|
||||||
.HasForeignKey("BookId")
|
|
||||||
.OnDelete(DeleteBehavior.Cascade);
|
|
||||||
});
|
|
||||||
|
|
||||||
b.OwnsOne("DataLayer.UserDefinedItem", "UserDefinedItem", b1 =>
|
|
||||||
{
|
|
||||||
b1.Property<int>("BookId");
|
|
||||||
|
|
||||||
b1.Property<string>("Tags");
|
|
||||||
|
|
||||||
b1.HasKey("BookId");
|
|
||||||
|
|
||||||
b1.ToTable("UserDefinedItem");
|
|
||||||
|
|
||||||
b1.HasOne("DataLayer.Book", "Book")
|
|
||||||
.WithOne("UserDefinedItem")
|
|
||||||
.HasForeignKey("DataLayer.UserDefinedItem", "BookId")
|
|
||||||
.OnDelete(DeleteBehavior.Cascade);
|
|
||||||
|
|
||||||
b1.OwnsOne("DataLayer.Rating", "Rating", b2 =>
|
|
||||||
{
|
|
||||||
b2.Property<int>("UserDefinedItemBookId");
|
|
||||||
|
|
||||||
b2.Property<float>("OverallRating");
|
|
||||||
|
|
||||||
b2.Property<float>("PerformanceRating");
|
|
||||||
|
|
||||||
b2.Property<float>("StoryRating");
|
|
||||||
|
|
||||||
b2.HasKey("UserDefinedItemBookId");
|
|
||||||
|
|
||||||
b2.ToTable("UserDefinedItem");
|
|
||||||
|
|
||||||
b2.HasOne("DataLayer.UserDefinedItem")
|
|
||||||
.WithOne("Rating")
|
|
||||||
.HasForeignKey("DataLayer.Rating", "UserDefinedItemBookId")
|
|
||||||
.OnDelete(DeleteBehavior.Cascade);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
b.OwnsOne("DataLayer.Rating", "Rating", b1 =>
|
|
||||||
{
|
|
||||||
b1.Property<int>("BookId")
|
|
||||||
.ValueGeneratedOnAdd()
|
|
||||||
.HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);
|
|
||||||
|
|
||||||
b1.Property<float>("OverallRating");
|
|
||||||
|
|
||||||
b1.Property<float>("PerformanceRating");
|
|
||||||
|
|
||||||
b1.Property<float>("StoryRating");
|
|
||||||
|
|
||||||
b1.HasKey("BookId");
|
|
||||||
|
|
||||||
b1.ToTable("Books");
|
|
||||||
|
|
||||||
b1.HasOne("DataLayer.Book")
|
|
||||||
.WithOne("Rating")
|
|
||||||
.HasForeignKey("DataLayer.Rating", "BookId")
|
|
||||||
.OnDelete(DeleteBehavior.Cascade);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("DataLayer.BookContributor", b =>
|
|
||||||
{
|
|
||||||
b.HasOne("DataLayer.Book", "Book")
|
|
||||||
.WithMany("ContributorsLink")
|
|
||||||
.HasForeignKey("BookId")
|
|
||||||
.OnDelete(DeleteBehavior.Cascade);
|
|
||||||
|
|
||||||
b.HasOne("DataLayer.Contributor", "Contributor")
|
|
||||||
.WithMany("BooksLink")
|
|
||||||
.HasForeignKey("ContributorId")
|
|
||||||
.OnDelete(DeleteBehavior.Cascade);
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("DataLayer.Category", b =>
|
|
||||||
{
|
|
||||||
b.HasOne("DataLayer.Category", "ParentCategory")
|
|
||||||
.WithMany()
|
|
||||||
.HasForeignKey("ParentCategoryCategoryId");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("DataLayer.LibraryBook", b =>
|
|
||||||
{
|
|
||||||
b.HasOne("DataLayer.Book", "Book")
|
|
||||||
.WithOne()
|
|
||||||
.HasForeignKey("DataLayer.LibraryBook", "BookId")
|
|
||||||
.OnDelete(DeleteBehavior.Cascade);
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("DataLayer.SeriesBook", b =>
|
|
||||||
{
|
|
||||||
b.HasOne("DataLayer.Book", "Book")
|
|
||||||
.WithMany("SeriesLink")
|
|
||||||
.HasForeignKey("BookId")
|
|
||||||
.OnDelete(DeleteBehavior.Cascade);
|
|
||||||
|
|
||||||
b.HasOne("DataLayer.Series", "Series")
|
|
||||||
.WithMany("BooksLink")
|
|
||||||
.HasForeignKey("SeriesId")
|
|
||||||
.OnDelete(DeleteBehavior.Cascade);
|
|
||||||
});
|
|
||||||
#pragma warning restore 612, 618
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -1,22 +0,0 @@
|
|||||||
using Microsoft.EntityFrameworkCore.Migrations;
|
|
||||||
|
|
||||||
namespace DataLayer.Migrations
|
|
||||||
{
|
|
||||||
public partial class PublisherContrib : Migration
|
|
||||||
{
|
|
||||||
protected override void Up(MigrationBuilder migrationBuilder)
|
|
||||||
{
|
|
||||||
migrationBuilder.DropColumn(
|
|
||||||
name: "Publisher",
|
|
||||||
table: "Books");
|
|
||||||
}
|
|
||||||
|
|
||||||
protected override void Down(MigrationBuilder migrationBuilder)
|
|
||||||
{
|
|
||||||
migrationBuilder.AddColumn<string>(
|
|
||||||
name: "Publisher",
|
|
||||||
table: "Books",
|
|
||||||
nullable: true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -6,7 +6,7 @@ using System.Text.RegularExpressions;
|
|||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using DataLayer;
|
using DataLayer;
|
||||||
using Dinah.Core;
|
using Dinah.Core;
|
||||||
using Dinah.EntityFrameworkCore;
|
using Dinah.Core.Collections.Generic;
|
||||||
using FileManager;
|
using FileManager;
|
||||||
using InternalUtilities;
|
using InternalUtilities;
|
||||||
using Newtonsoft.Json;
|
using Newtonsoft.Json;
|
||||||
@ -53,7 +53,7 @@ namespace DomainServices
|
|||||||
if (productItems == null || !productItems.Any())
|
if (productItems == null || !productItems.Any())
|
||||||
return (0, 0);
|
return (0, 0);
|
||||||
|
|
||||||
filterAndValidate(productItems);
|
productItems = filterAndValidate(productItems);
|
||||||
|
|
||||||
int newEntries;
|
int newEntries;
|
||||||
using (var context = LibationContext.Create())
|
using (var context = LibationContext.Create())
|
||||||
@ -82,7 +82,7 @@ namespace DomainServices
|
|||||||
|
|
||||||
return (productItems.Count, newEntries);
|
return (productItems.Count, newEntries);
|
||||||
}
|
}
|
||||||
private static void filterAndValidate(List<LibraryDTO> collection)
|
private static List<LibraryDTO> filterAndValidate(List<LibraryDTO> collection)
|
||||||
{
|
{
|
||||||
//debug//var episodes = collection.Where(dto => dto.IsEpisodes).ToList();
|
//debug//var episodes = collection.Where(dto => dto.IsEpisodes).ToList();
|
||||||
|
|
||||||
@ -92,16 +92,19 @@ namespace DomainServices
|
|||||||
if (collection.Any(pi => string.IsNullOrWhiteSpace(pi.ProductId)))
|
if (collection.Any(pi => string.IsNullOrWhiteSpace(pi.ProductId)))
|
||||||
throw new Exception("All product items must contain a Product Id");
|
throw new Exception("All product items must contain a Product Id");
|
||||||
|
|
||||||
var duplicateIds = collection
|
return collection.DistinctBy(pi => pi.ProductId).ToList();
|
||||||
.GroupBy(pi => pi.ProductId)
|
|
||||||
.Where(grp => grp.Count() > 1)
|
|
||||||
.Select(grp => grp.Key);
|
|
||||||
|
|
||||||
if (duplicateIds.Any())
|
// var duplicateIds = collection
|
||||||
throw new Exception("Cannot insert multiples of the same ProductId. Duplicates:"
|
// .GroupBy(pi => pi.ProductId)
|
||||||
+ duplicateIds
|
// .Where(grp => grp.Count() > 1)
|
||||||
.Select(a => "\r\n- " + a)
|
// .Select(grp => grp.Key)
|
||||||
.Aggregate((a, b) => a + b));
|
//.ToList();
|
||||||
|
|
||||||
|
// if (duplicateIds.Any())
|
||||||
|
// throw new Exception("Cannot insert multiples of the same ProductId. Duplicates:"
|
||||||
|
// + duplicateIds
|
||||||
|
// .Select(a => "\r\n- " + a)
|
||||||
|
// .Aggregate((a, b) => a + b));
|
||||||
}
|
}
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
|||||||
18
__TODO.txt
18
__TODO.txt
@ -5,22 +5,6 @@ scraping code
|
|||||||
"legacy inAudible wire-up code"
|
"legacy inAudible wire-up code"
|
||||||
-- end LEGACY ---------------------------------------------------------------------------------------------------------------------
|
-- end LEGACY ---------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
-- begin UPGRADE TO EF CORE 3 ---------------------------------------------------------------------------------------------------------------------
|
|
||||||
dinah.EFCore, DataLayer
|
|
||||||
2.2.6 == no problem
|
|
||||||
3.0.0 == problem:
|
|
||||||
System.InvalidOperationException: 'The type 'UserDefinedItem' cannot be configured as non-owned because an owned entity type with the same name already exists.'
|
|
||||||
|
|
||||||
https://github.com/aspnet/EntityFrameworkCore/issues/15681
|
|
||||||
https://www.infoq.com/news/2019/06/EF-Core-3-Breaking-Changes/
|
|
||||||
https://docs.microsoft.com/en-us/ef/core/modeling/owned-entities
|
|
||||||
https://docs.microsoft.com/en-us/ef/core/what-is-new/ef-core-3.0/breaking-changes
|
|
||||||
new version: WithOwner
|
|
||||||
usage
|
|
||||||
.OwnsOne(...).WithOwner()
|
|
||||||
.OwnsMany(...).WithOwner()
|
|
||||||
-- end UPGRADE TO EF CORE 3 ---------------------------------------------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
-- begin REPLACE SCRAPING WITH API ---------------------------------------------------------------------------------------------------------------------
|
-- begin REPLACE SCRAPING WITH API ---------------------------------------------------------------------------------------------------------------------
|
||||||
incl episodes. eg: "Bill Bryson's Appliance of Science"
|
incl episodes. eg: "Bill Bryson's Appliance of Science"
|
||||||
refining episode retrieval might also get rid of the need for IsEpisodes property
|
refining episode retrieval might also get rid of the need for IsEpisodes property
|
||||||
@ -117,9 +101,7 @@ also touches parts of code which: db write via a hook, search engine re-index
|
|||||||
-- end ENHANCEMENT, PERFORMANCE: TAGS ---------------------------------------------------------------------------------------------------------------------
|
-- end ENHANCEMENT, PERFORMANCE: TAGS ---------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
-- begin ENHANCEMENT, PERFORMANCE: GRID ---------------------------------------------------------------------------------------------------------------------
|
-- begin ENHANCEMENT, PERFORMANCE: GRID ---------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
when a book/pdf is NOT liberated, calculating the grid's [Liberated][NOT d/l'ed] label is very slow
|
when a book/pdf is NOT liberated, calculating the grid's [Liberated][NOT d/l'ed] label is very slow
|
||||||
|
|
||||||
-- end ENHANCEMENT, PERFORMANCE: GRID ---------------------------------------------------------------------------------------------------------------------
|
-- end ENHANCEMENT, PERFORMANCE: GRID ---------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
-- begin ENHANCEMENT: REMOVE BOOK ---------------------------------------------------------------------------------------------------------------------
|
-- begin ENHANCEMENT: REMOVE BOOK ---------------------------------------------------------------------------------------------------------------------
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user