protected override void BuildModel(ModelBuilder modelBuilder) { #pragma warning disable 612, 618 modelBuilder .HasAnnotation("ProductVersion", "6.0.1") .HasAnnotation("Relational:MaxIdentifierLength", 128); SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder, 1L, 1); modelBuilder.Entity("MemCheck.Domain.Card", b => { b.Property <Guid>("Id") .ValueGeneratedOnAdd() .HasColumnType("uniqueidentifier"); b.Property <string>("AdditionalInfo") .IsRequired() .HasColumnType("nvarchar(max)"); b.Property <double>("AverageRating") .HasColumnType("float"); b.Property <string>("BackSide") .IsRequired() .HasColumnType("nvarchar(max)"); b.Property <Guid>("CardLanguageId") .HasColumnType("uniqueidentifier"); b.Property <string>("FrontSide") .IsRequired() .HasColumnType("nvarchar(max)"); b.Property <DateTime>("InitialCreationUtcDate") .HasColumnType("datetime2"); b.Property <Guid?>("PreviousVersionId") .HasColumnType("uniqueidentifier"); b.Property <int>("RatingCount") .HasColumnType("int"); b.Property <Guid>("VersionCreatorId") .HasColumnType("uniqueidentifier"); b.Property <string>("VersionDescription") .IsRequired() .HasColumnType("nvarchar(max)"); b.Property <int>("VersionType") .HasColumnType("int"); b.Property <DateTime>("VersionUtcDate") .HasColumnType("datetime2"); b.HasKey("Id"); b.HasIndex("CardLanguageId"); b.HasIndex("PreviousVersionId"); b.HasIndex("VersionCreatorId"); b.ToTable("Cards"); }); modelBuilder.Entity("MemCheck.Domain.CardInDeck", b => { b.Property <Guid>("CardId") .HasColumnType("uniqueidentifier"); b.Property <Guid>("DeckId") .HasColumnType("uniqueidentifier"); b.Property <DateTime>("AddToDeckUtcTime") .HasColumnType("datetime2"); b.Property <int>("BiggestHeapReached") .HasColumnType("int"); b.Property <int>("CurrentHeap") .HasColumnType("int"); b.Property <DateTime>("ExpiryUtcTime") .HasColumnType("datetime2"); b.Property <DateTime>("LastLearnUtcTime") .HasColumnType("datetime2"); b.Property <int>("NbTimesInNotLearnedHeap") .HasColumnType("int"); b.HasKey("CardId", "DeckId"); b.HasIndex("CurrentHeap"); b.HasIndex("DeckId", "CurrentHeap", "CardId"); SqlServerIndexBuilderExtensions.IncludeProperties(b.HasIndex("DeckId", "CurrentHeap", "CardId"), new[] { "AddToDeckUtcTime", "BiggestHeapReached", "LastLearnUtcTime", "NbTimesInNotLearnedHeap" }); b.HasIndex("DeckId", "CurrentHeap", "ExpiryUtcTime"); SqlServerIndexBuilderExtensions.IncludeProperties(b.HasIndex("DeckId", "CurrentHeap", "ExpiryUtcTime"), new[] { "AddToDeckUtcTime", "BiggestHeapReached", "CardId", "LastLearnUtcTime", "NbTimesInNotLearnedHeap" }); b.ToTable("CardsInDecks"); }); modelBuilder.Entity("MemCheck.Domain.CardInSearchResult", b => { b.Property <Guid>("SearchSubscriptionId") .HasColumnType("uniqueidentifier"); b.Property <Guid>("CardId") .HasColumnType("uniqueidentifier"); b.HasKey("SearchSubscriptionId", "CardId"); b.ToTable("CardsInSearchResults"); }); modelBuilder.Entity("MemCheck.Domain.CardLanguage", b => { b.Property <Guid>("Id") .ValueGeneratedOnAdd() .HasColumnType("uniqueidentifier"); b.Property <string>("Name") .IsRequired() .HasMaxLength(50) .HasColumnType("nvarchar(50)"); b.HasKey("Id"); b.ToTable("CardLanguages"); }); modelBuilder.Entity("MemCheck.Domain.CardNotificationSubscription", b => { b.Property <Guid>("CardId") .HasColumnType("uniqueidentifier"); b.Property <Guid>("UserId") .HasColumnType("uniqueidentifier"); b.Property <DateTime>("LastNotificationUtcDate") .HasColumnType("datetime2"); b.Property <int>("RegistrationMethod") .HasColumnType("int"); b.Property <DateTime>("RegistrationUtcDate") .HasColumnType("datetime2"); b.HasKey("CardId", "UserId"); b.HasIndex("UserId"); b.ToTable("CardNotifications"); }); modelBuilder.Entity("MemCheck.Domain.CardPreviousVersion", b => { b.Property <Guid>("Id") .ValueGeneratedOnAdd() .HasColumnType("uniqueidentifier"); b.Property <string>("AdditionalInfo") .IsRequired() .HasColumnType("nvarchar(max)"); b.Property <string>("BackSide") .IsRequired() .HasColumnType("nvarchar(max)"); b.Property <Guid>("Card") .HasColumnType("uniqueidentifier"); b.Property <Guid>("CardLanguageId") .HasColumnType("uniqueidentifier"); b.Property <string>("FrontSide") .IsRequired() .HasColumnType("nvarchar(max)"); b.Property <Guid?>("PreviousVersionId") .HasColumnType("uniqueidentifier"); b.Property <Guid>("VersionCreatorId") .HasColumnType("uniqueidentifier"); b.Property <string>("VersionDescription") .IsRequired() .HasColumnType("nvarchar(max)"); b.Property <int>("VersionType") .HasColumnType("int"); b.Property <DateTime>("VersionUtcDate") .HasColumnType("datetime2"); b.HasKey("Id"); b.HasIndex("CardLanguageId"); b.HasIndex("PreviousVersionId"); b.HasIndex("VersionCreatorId"); b.ToTable("CardPreviousVersions"); }); modelBuilder.Entity("MemCheck.Domain.Deck", b => { b.Property <Guid>("Id") .ValueGeneratedOnAdd() .HasColumnType("uniqueidentifier"); b.Property <string>("Description") .IsRequired() .HasColumnType("nvarchar(max)"); b.Property <int>("HeapingAlgorithmId") .HasColumnType("int"); b.Property <Guid>("OwnerId") .HasColumnType("uniqueidentifier"); b.HasKey("Id"); b.HasIndex("OwnerId"); b.ToTable("Decks"); }); modelBuilder.Entity("MemCheck.Domain.ExcludedTagInSearchSubscription", b => { b.Property <Guid>("SearchSubscriptionId") .HasColumnType("uniqueidentifier"); b.Property <Guid>("TagId") .HasColumnType("uniqueidentifier"); b.HasKey("SearchSubscriptionId", "TagId"); b.ToTable("ExcludedTagInSearchSubscriptions"); }); modelBuilder.Entity("MemCheck.Domain.Image", b => { b.Property <Guid>("Id") .ValueGeneratedOnAdd() .HasColumnType("uniqueidentifier"); b.Property <byte[]>("BigBlob") .IsRequired() .HasColumnType("varbinary(max)"); b.Property <int>("BigBlobSize") .HasColumnType("int"); b.Property <string>("Description") .IsRequired() .HasColumnType("nvarchar(max)"); b.Property <DateTime>("InitialUploadUtcDate") .HasColumnType("datetime2"); b.Property <DateTime>("LastChangeUtcDate") .HasColumnType("datetime2"); b.Property <byte[]>("MediumBlob") .IsRequired() .HasColumnType("varbinary(max)"); b.Property <int>("MediumBlobSize") .HasColumnType("int"); b.Property <string>("Name") .IsRequired() .HasColumnType("nvarchar(450)"); b.Property <byte[]>("OriginalBlob") .IsRequired() .HasColumnType("varbinary(max)"); b.Property <string>("OriginalContentType") .IsRequired() .HasColumnType("nvarchar(max)"); b.Property <int>("OriginalSize") .HasColumnType("int"); b.Property <Guid>("OwnerId") .HasColumnType("uniqueidentifier"); b.Property <Guid?>("PreviousVersionId") .HasColumnType("uniqueidentifier"); b.Property <byte[]>("SmallBlob") .IsRequired() .HasColumnType("varbinary(max)"); b.Property <int>("SmallBlobSize") .HasColumnType("int"); b.Property <string>("Source") .IsRequired() .HasColumnType("nvarchar(max)"); b.Property <string>("VersionDescription") .IsRequired() .HasColumnType("nvarchar(max)"); b.Property <int>("VersionType") .HasColumnType("int"); b.HasKey("Id"); b.HasIndex("Name") .IsUnique(); b.HasIndex("OwnerId"); b.HasIndex("PreviousVersionId"); b.ToTable("Images"); }); modelBuilder.Entity("MemCheck.Domain.ImageInCard", b => { b.Property <Guid>("CardId") .HasColumnType("uniqueidentifier"); b.Property <Guid>("ImageId") .HasColumnType("uniqueidentifier"); b.Property <int>("CardSide") .HasColumnType("int"); b.HasKey("CardId", "ImageId"); b.HasIndex("ImageId"); b.ToTable("ImagesInCards"); }); modelBuilder.Entity("MemCheck.Domain.ImageInCardPreviousVersion", b => { b.Property <Guid>("ImageId") .HasColumnType("uniqueidentifier"); b.Property <Guid>("CardPreviousVersionId") .HasColumnType("uniqueidentifier"); b.Property <int>("CardSide") .HasColumnType("int"); b.HasKey("ImageId", "CardPreviousVersionId"); b.HasIndex("CardPreviousVersionId"); b.ToTable("ImagesInCardPreviousVersions"); }); modelBuilder.Entity("MemCheck.Domain.ImagePreviousVersion", b => { b.Property <Guid>("Id") .ValueGeneratedOnAdd() .HasColumnType("uniqueidentifier"); b.Property <string>("Description") .IsRequired() .HasColumnType("nvarchar(max)"); b.Property <Guid>("Image") .HasColumnType("uniqueidentifier"); b.Property <DateTime>("InitialUploadUtcDate") .HasColumnType("datetime2"); b.Property <string>("Name") .IsRequired() .HasColumnType("nvarchar(max)"); b.Property <byte[]>("OriginalBlob") .IsRequired() .HasColumnType("varbinary(max)"); b.Property <string>("OriginalContentType") .IsRequired() .HasColumnType("nvarchar(max)"); b.Property <int>("OriginalSize") .HasColumnType("int"); b.Property <Guid>("OwnerId") .HasColumnType("uniqueidentifier"); b.Property <Guid?>("PreviousVersionId") .HasColumnType("uniqueidentifier"); b.Property <string>("Source") .IsRequired() .HasColumnType("nvarchar(max)"); b.Property <string>("VersionDescription") .IsRequired() .HasColumnType("nvarchar(max)"); b.Property <int>("VersionType") .HasColumnType("int"); b.Property <DateTime>("VersionUtcDate") .HasColumnType("datetime2"); b.HasKey("Id"); b.HasIndex("OwnerId"); b.HasIndex("PreviousVersionId"); b.ToTable("ImagePreviousVersions"); }); modelBuilder.Entity("MemCheck.Domain.MemCheckUser", b => { b.Property <Guid>("Id") .ValueGeneratedOnAdd() .HasColumnType("uniqueidentifier"); b.Property <int>("AccessFailedCount") .HasColumnType("int"); b.Property <string>("ConcurrencyStamp") .IsConcurrencyToken() .HasColumnType("nvarchar(max)"); b.Property <DateTime?>("DeletionDate") .HasColumnType("datetime2"); b.Property <string>("Email") .HasMaxLength(256) .HasColumnType("nvarchar(256)"); b.Property <bool>("EmailConfirmed") .HasColumnType("bit"); b.Property <DateTime>("LastNotificationUtcDate") .HasColumnType("datetime2"); b.Property <bool>("LockoutEnabled") .HasColumnType("bit"); b.Property <DateTimeOffset?>("LockoutEnd") .HasColumnType("datetimeoffset"); b.Property <int>("MinimumCountOfDaysBetweenNotifs") .HasColumnType("int"); b.Property <string>("NormalizedEmail") .HasMaxLength(256) .HasColumnType("nvarchar(256)"); b.Property <string>("NormalizedUserName") .HasMaxLength(256) .HasColumnType("nvarchar(256)"); b.Property <string>("PasswordHash") .HasColumnType("nvarchar(max)"); b.Property <string>("PhoneNumber") .HasColumnType("nvarchar(max)"); b.Property <bool>("PhoneNumberConfirmed") .HasColumnType("bit"); b.Property <Guid?>("PreferredCardCreationLanguageId") .HasColumnType("uniqueidentifier"); b.Property <string>("SecurityStamp") .HasColumnType("nvarchar(max)"); b.Property <bool>("SubscribeToCardOnEdit") .HasColumnType("bit"); b.Property <bool>("TwoFactorEnabled") .HasColumnType("bit"); b.Property <string>("UILanguage") .HasColumnType("nvarchar(max)"); b.Property <string>("UserName") .HasMaxLength(256) .HasColumnType("nvarchar(256)"); b.HasKey("Id"); b.HasIndex("NormalizedEmail") .HasDatabaseName("EmailIndex"); b.HasIndex("NormalizedUserName") .IsUnique() .HasDatabaseName("UserNameIndex") .HasFilter("[NormalizedUserName] IS NOT NULL"); b.HasIndex("PreferredCardCreationLanguageId"); b.ToTable("AspNetUsers", (string)null); }); modelBuilder.Entity("MemCheck.Domain.MemCheckUserRole", b => { b.Property <Guid>("Id") .ValueGeneratedOnAdd() .HasColumnType("uniqueidentifier"); b.Property <string>("ConcurrencyStamp") .IsConcurrencyToken() .HasColumnType("nvarchar(max)"); b.Property <string>("Name") .HasMaxLength(256) .HasColumnType("nvarchar(256)"); b.Property <string>("NormalizedName") .HasMaxLength(256) .HasColumnType("nvarchar(256)"); b.HasKey("Id"); b.HasIndex("NormalizedName") .IsUnique() .HasDatabaseName("RoleNameIndex") .HasFilter("[NormalizedName] IS NOT NULL"); b.ToTable("AspNetRoles", (string)null); }); modelBuilder.Entity("MemCheck.Domain.RequiredTagInSearchSubscription", b => { b.Property <Guid>("SearchSubscriptionId") .HasColumnType("uniqueidentifier"); b.Property <Guid>("TagId") .HasColumnType("uniqueidentifier"); b.HasKey("SearchSubscriptionId", "TagId"); b.ToTable("RequiredTagInSearchSubscriptions"); }); modelBuilder.Entity("MemCheck.Domain.SearchSubscription", b => { b.Property <Guid>("Id") .ValueGeneratedOnAdd() .HasColumnType("uniqueidentifier"); b.Property <bool>("ExcludeAllTags") .HasColumnType("bit"); b.Property <Guid>("ExcludedDeck") .HasColumnType("uniqueidentifier"); b.Property <DateTime>("LastRunUtcDate") .HasColumnType("datetime2"); b.Property <string>("Name") .IsRequired() .HasColumnType("nvarchar(max)"); b.Property <DateTime>("RegistrationUtcDate") .HasColumnType("datetime2"); b.Property <string>("RequiredText") .IsRequired() .HasColumnType("nvarchar(max)"); b.Property <Guid>("UserId") .HasColumnType("uniqueidentifier"); b.HasKey("Id"); b.ToTable("SearchSubscriptions"); }); modelBuilder.Entity("MemCheck.Domain.Tag", b => { b.Property <Guid>("Id") .ValueGeneratedOnAdd() .HasColumnType("uniqueidentifier"); b.Property <string>("Description") .IsRequired() .HasMaxLength(5000) .HasColumnType("nvarchar(max)"); b.Property <string>("Name") .IsRequired() .HasMaxLength(50) .HasColumnType("nvarchar(50)"); b.HasKey("Id"); b.ToTable("Tags"); }); modelBuilder.Entity("MemCheck.Domain.TagInCard", b => { b.Property <Guid>("CardId") .HasColumnType("uniqueidentifier"); b.Property <Guid>("TagId") .HasColumnType("uniqueidentifier"); b.HasKey("CardId", "TagId"); b.HasIndex("TagId"); b.ToTable("TagsInCards"); }); modelBuilder.Entity("MemCheck.Domain.TagInPreviousCardVersion", b => { b.Property <Guid>("CardPreviousVersionId") .HasColumnType("uniqueidentifier"); b.Property <Guid>("TagId") .HasColumnType("uniqueidentifier"); b.HasKey("CardPreviousVersionId", "TagId"); b.HasIndex("TagId"); b.ToTable("TagInPreviousCardVersions"); }); modelBuilder.Entity("MemCheck.Domain.UserCardRating", b => { b.Property <Guid>("CardId") .HasColumnType("uniqueidentifier"); b.Property <Guid>("UserId") .HasColumnType("uniqueidentifier"); b.Property <int>("Rating") .HasColumnType("int"); b.HasKey("CardId", "UserId"); b.HasIndex("UserId"); SqlServerIndexBuilderExtensions.IncludeProperties(b.HasIndex("UserId"), new[] { "Rating" }); b.ToTable("UserCardRatings"); }); modelBuilder.Entity("MemCheck.Domain.UserWithViewOnCard", b => { b.Property <Guid>("CardId") .HasColumnType("uniqueidentifier"); b.Property <Guid>("UserId") .HasColumnType("uniqueidentifier"); b.HasKey("CardId", "UserId"); b.HasIndex("UserId"); b.ToTable("UsersWithViewOnCards"); }); modelBuilder.Entity("MemCheck.Domain.UserWithViewOnCardPreviousVersion", b => { b.Property <Guid>("CardPreviousVersionId") .HasColumnType("uniqueidentifier"); b.Property <Guid>("AllowedUserId") .HasColumnType("uniqueidentifier"); b.HasKey("CardPreviousVersionId", "AllowedUserId"); b.HasIndex("AllowedUserId"); b.ToTable("UsersWithViewOnCardPreviousVersions"); }); modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim<System.Guid>", b => { b.Property <int>("Id") .ValueGeneratedOnAdd() .HasColumnType("int"); SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property <int>("Id"), 1L, 1); b.Property <string>("ClaimType") .HasColumnType("nvarchar(max)"); b.Property <string>("ClaimValue") .HasColumnType("nvarchar(max)"); b.Property <Guid>("RoleId") .HasColumnType("uniqueidentifier"); b.HasKey("Id"); b.HasIndex("RoleId"); b.ToTable("AspNetRoleClaims", (string)null); }); modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim<System.Guid>", b => { b.Property <int>("Id") .ValueGeneratedOnAdd() .HasColumnType("int"); SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property <int>("Id"), 1L, 1); b.Property <string>("ClaimType") .HasColumnType("nvarchar(max)"); b.Property <string>("ClaimValue") .HasColumnType("nvarchar(max)"); b.Property <Guid>("UserId") .HasColumnType("uniqueidentifier"); b.HasKey("Id"); b.HasIndex("UserId"); b.ToTable("AspNetUserClaims", (string)null); }); modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin<System.Guid>", b => { b.Property <string>("LoginProvider") .HasColumnType("nvarchar(450)"); b.Property <string>("ProviderKey") .HasColumnType("nvarchar(450)"); b.Property <string>("ProviderDisplayName") .HasColumnType("nvarchar(max)"); b.Property <Guid>("UserId") .HasColumnType("uniqueidentifier"); b.HasKey("LoginProvider", "ProviderKey"); b.HasIndex("UserId"); b.ToTable("AspNetUserLogins", (string)null); }); modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole<System.Guid>", b => { b.Property <Guid>("UserId") .HasColumnType("uniqueidentifier"); b.Property <Guid>("RoleId") .HasColumnType("uniqueidentifier"); b.HasKey("UserId", "RoleId"); b.HasIndex("RoleId"); b.ToTable("AspNetUserRoles", (string)null); }); modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken<System.Guid>", b => { b.Property <Guid>("UserId") .HasColumnType("uniqueidentifier"); b.Property <string>("LoginProvider") .HasColumnType("nvarchar(450)"); b.Property <string>("Name") .HasColumnType("nvarchar(450)"); b.Property <string>("Value") .HasColumnType("nvarchar(max)"); b.HasKey("UserId", "LoginProvider", "Name"); b.ToTable("AspNetUserTokens", (string)null); }); modelBuilder.Entity("MemCheck.Domain.Card", b => { b.HasOne("MemCheck.Domain.CardLanguage", "CardLanguage") .WithMany() .HasForeignKey("CardLanguageId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.HasOne("MemCheck.Domain.CardPreviousVersion", "PreviousVersion") .WithMany() .HasForeignKey("PreviousVersionId"); b.HasOne("MemCheck.Domain.MemCheckUser", "VersionCreator") .WithMany() .HasForeignKey("VersionCreatorId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.Navigation("CardLanguage"); b.Navigation("PreviousVersion"); b.Navigation("VersionCreator"); }); modelBuilder.Entity("MemCheck.Domain.CardInDeck", b => { b.HasOne("MemCheck.Domain.Card", "Card") .WithMany("CardInDecks") .HasForeignKey("CardId") .OnDelete(DeleteBehavior.NoAction) .IsRequired(); b.HasOne("MemCheck.Domain.Deck", "Deck") .WithMany("CardInDecks") .HasForeignKey("DeckId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.Navigation("Card"); b.Navigation("Deck"); }); modelBuilder.Entity("MemCheck.Domain.CardInSearchResult", b => { b.HasOne("MemCheck.Domain.SearchSubscription", null) .WithMany("CardsInLastRun") .HasForeignKey("SearchSubscriptionId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); }); modelBuilder.Entity("MemCheck.Domain.CardNotificationSubscription", b => { b.HasOne("MemCheck.Domain.MemCheckUser", "User") .WithMany() .HasForeignKey("UserId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.Navigation("User"); }); modelBuilder.Entity("MemCheck.Domain.CardPreviousVersion", b => { b.HasOne("MemCheck.Domain.CardLanguage", "CardLanguage") .WithMany() .HasForeignKey("CardLanguageId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.HasOne("MemCheck.Domain.CardPreviousVersion", "PreviousVersion") .WithMany() .HasForeignKey("PreviousVersionId"); b.HasOne("MemCheck.Domain.MemCheckUser", "VersionCreator") .WithMany() .HasForeignKey("VersionCreatorId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.Navigation("CardLanguage"); b.Navigation("PreviousVersion"); b.Navigation("VersionCreator"); }); modelBuilder.Entity("MemCheck.Domain.Deck", b => { b.HasOne("MemCheck.Domain.MemCheckUser", "Owner") .WithMany() .HasForeignKey("OwnerId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.Navigation("Owner"); }); modelBuilder.Entity("MemCheck.Domain.ExcludedTagInSearchSubscription", b => { b.HasOne("MemCheck.Domain.SearchSubscription", null) .WithMany("ExcludedTags") .HasForeignKey("SearchSubscriptionId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); }); modelBuilder.Entity("MemCheck.Domain.Image", b => { b.HasOne("MemCheck.Domain.MemCheckUser", "Owner") .WithMany() .HasForeignKey("OwnerId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.HasOne("MemCheck.Domain.ImagePreviousVersion", "PreviousVersion") .WithMany() .HasForeignKey("PreviousVersionId"); b.Navigation("Owner"); b.Navigation("PreviousVersion"); }); modelBuilder.Entity("MemCheck.Domain.ImageInCard", b => { b.HasOne("MemCheck.Domain.Card", "Card") .WithMany("Images") .HasForeignKey("CardId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.HasOne("MemCheck.Domain.Image", "Image") .WithMany("Cards") .HasForeignKey("ImageId") .OnDelete(DeleteBehavior.NoAction) .IsRequired(); b.Navigation("Card"); b.Navigation("Image"); }); modelBuilder.Entity("MemCheck.Domain.ImageInCardPreviousVersion", b => { b.HasOne("MemCheck.Domain.CardPreviousVersion", "CardPreviousVersion") .WithMany("Images") .HasForeignKey("CardPreviousVersionId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.HasOne("MemCheck.Domain.Image", "Image") .WithMany("CardPreviousVersions") .HasForeignKey("ImageId") .OnDelete(DeleteBehavior.NoAction) .IsRequired(); b.Navigation("CardPreviousVersion"); b.Navigation("Image"); }); modelBuilder.Entity("MemCheck.Domain.ImagePreviousVersion", b => { b.HasOne("MemCheck.Domain.MemCheckUser", "Owner") .WithMany() .HasForeignKey("OwnerId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.HasOne("MemCheck.Domain.ImagePreviousVersion", "PreviousVersion") .WithMany() .HasForeignKey("PreviousVersionId"); b.Navigation("Owner"); b.Navigation("PreviousVersion"); }); modelBuilder.Entity("MemCheck.Domain.MemCheckUser", b => { b.HasOne("MemCheck.Domain.CardLanguage", "PreferredCardCreationLanguage") .WithMany() .HasForeignKey("PreferredCardCreationLanguageId"); b.Navigation("PreferredCardCreationLanguage"); }); modelBuilder.Entity("MemCheck.Domain.RequiredTagInSearchSubscription", b => { b.HasOne("MemCheck.Domain.SearchSubscription", null) .WithMany("RequiredTags") .HasForeignKey("SearchSubscriptionId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); }); modelBuilder.Entity("MemCheck.Domain.TagInCard", b => { b.HasOne("MemCheck.Domain.Card", "Card") .WithMany("TagsInCards") .HasForeignKey("CardId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.HasOne("MemCheck.Domain.Tag", "Tag") .WithMany("TagsInCards") .HasForeignKey("TagId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.Navigation("Card"); b.Navigation("Tag"); }); modelBuilder.Entity("MemCheck.Domain.TagInPreviousCardVersion", b => { b.HasOne("MemCheck.Domain.CardPreviousVersion", "CardPreviousVersion") .WithMany("Tags") .HasForeignKey("CardPreviousVersionId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.HasOne("MemCheck.Domain.Tag", "Tag") .WithMany() .HasForeignKey("TagId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.Navigation("CardPreviousVersion"); b.Navigation("Tag"); }); modelBuilder.Entity("MemCheck.Domain.UserCardRating", b => { b.HasOne("MemCheck.Domain.Card", "Card") .WithMany("UserCardRating") .HasForeignKey("CardId") .OnDelete(DeleteBehavior.NoAction) .IsRequired(); b.HasOne("MemCheck.Domain.MemCheckUser", "User") .WithMany("UserCardRating") .HasForeignKey("UserId") .OnDelete(DeleteBehavior.NoAction) .IsRequired(); b.Navigation("Card"); b.Navigation("User"); }); modelBuilder.Entity("MemCheck.Domain.UserWithViewOnCard", b => { b.HasOne("MemCheck.Domain.Card", "Card") .WithMany("UsersWithView") .HasForeignKey("CardId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.HasOne("MemCheck.Domain.MemCheckUser", "User") .WithMany("UsersWithView") .HasForeignKey("UserId") .OnDelete(DeleteBehavior.NoAction) .IsRequired(); b.Navigation("Card"); b.Navigation("User"); }); modelBuilder.Entity("MemCheck.Domain.UserWithViewOnCardPreviousVersion", b => { b.HasOne("MemCheck.Domain.MemCheckUser", "AllowedUser") .WithMany("UsersWithViewOnPreviousVersion") .HasForeignKey("AllowedUserId") .OnDelete(DeleteBehavior.NoAction) .IsRequired(); b.HasOne("MemCheck.Domain.CardPreviousVersion", "CardPreviousVersion") .WithMany("UsersWithView") .HasForeignKey("CardPreviousVersionId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.Navigation("AllowedUser"); b.Navigation("CardPreviousVersion"); }); modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim<System.Guid>", b => { b.HasOne("MemCheck.Domain.MemCheckUserRole", null) .WithMany() .HasForeignKey("RoleId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); }); modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim<System.Guid>", b => { b.HasOne("MemCheck.Domain.MemCheckUser", null) .WithMany() .HasForeignKey("UserId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); }); modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin<System.Guid>", b => { b.HasOne("MemCheck.Domain.MemCheckUser", null) .WithMany() .HasForeignKey("UserId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); }); modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole<System.Guid>", b => { b.HasOne("MemCheck.Domain.MemCheckUserRole", null) .WithMany() .HasForeignKey("RoleId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.HasOne("MemCheck.Domain.MemCheckUser", null) .WithMany() .HasForeignKey("UserId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); }); modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken<System.Guid>", b => { b.HasOne("MemCheck.Domain.MemCheckUser", null) .WithMany() .HasForeignKey("UserId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); }); modelBuilder.Entity("MemCheck.Domain.Card", b => { b.Navigation("CardInDecks"); b.Navigation("Images"); b.Navigation("TagsInCards"); b.Navigation("UserCardRating"); b.Navigation("UsersWithView"); }); modelBuilder.Entity("MemCheck.Domain.CardPreviousVersion", b => { b.Navigation("Images"); b.Navigation("Tags"); b.Navigation("UsersWithView"); }); modelBuilder.Entity("MemCheck.Domain.Deck", b => { b.Navigation("CardInDecks"); }); modelBuilder.Entity("MemCheck.Domain.Image", b => { b.Navigation("CardPreviousVersions"); b.Navigation("Cards"); }); modelBuilder.Entity("MemCheck.Domain.MemCheckUser", b => { b.Navigation("UserCardRating"); b.Navigation("UsersWithView"); b.Navigation("UsersWithViewOnPreviousVersion"); }); modelBuilder.Entity("MemCheck.Domain.SearchSubscription", b => { b.Navigation("CardsInLastRun"); b.Navigation("ExcludedTags"); b.Navigation("RequiredTags"); }); modelBuilder.Entity("MemCheck.Domain.Tag", b => { b.Navigation("TagsInCards"); }); #pragma warning restore 612, 618 }
protected override void BuildTargetModel(ModelBuilder modelBuilder) { #pragma warning disable 612, 618 modelBuilder .HasAnnotation("ProductVersion", "6.0.0") .HasAnnotation("Relational:MaxIdentifierLength", 128); SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder, 1L, 1); modelBuilder.HasSequence <int>("PollId") .StartsAt(10000000L); modelBuilder.Entity("RaidBattlesBot.Model.Friendship", b => { b.Property <long>("Id") .HasColumnType("bigint"); b.Property <long>("FriendId") .HasColumnType("bigint"); b.Property <DateTimeOffset?>("Modified") .HasColumnType("datetimeoffset"); b.Property <int?>("PollId") .HasColumnType("int"); b.Property <int>("Type") .HasColumnType("int"); b.HasKey("Id", "FriendId"); b.HasIndex("PollId"); b.ToTable("Friendship", (string)null); }); modelBuilder.Entity("RaidBattlesBot.Model.Notification", b => { b.Property <int>("PollId") .HasColumnType("int"); b.Property <long>("ChatId") .HasColumnType("bigint"); b.Property <byte>("Type") .HasColumnType("tinyint"); b.Property <long?>("BotId") .HasColumnType("bigint"); b.Property <DateTimeOffset?>("DateTime") .HasColumnType("datetimeoffset"); b.Property <long?>("MessageId") .HasColumnType("bigint"); b.HasKey("PollId", "ChatId", "Type"); b.ToTable("Notifications", (string)null); }); modelBuilder.Entity("RaidBattlesBot.Model.Player", b => { b.Property <long>("UserId") .HasColumnType("bigint"); b.Property <bool?>("AutoApproveFriendship") .HasColumnType("bit"); b.Property <long?>("FriendCode") .HasColumnType("bigint"); b.Property <DateTimeOffset?>("Modified") .HasColumnType("datetimeoffset"); b.Property <string>("Nickname") .HasColumnType("nvarchar(max)"); b.HasKey("UserId"); b.ToTable("Players", (string)null); }); modelBuilder.Entity("RaidBattlesBot.Model.Poll", b => { b.Property <int>("Id") .ValueGeneratedOnAdd() .HasColumnType("int") .HasDefaultValueSql("NEXT VALUE FOR PollId"); b.Property <int?>("AllowedVotes") .HasColumnType("int"); b.Property <bool>("Cancelled") .HasColumnType("bit"); b.Property <bool>("ExRaidGym") .HasColumnType("bit"); b.Property <DateTimeOffset?>("Modified") .HasColumnType("datetimeoffset"); b.Property <long?>("Owner") .HasColumnType("bigint"); b.Property <string>("PortalId") .HasColumnType("nvarchar(450)"); b.Property <int?>("RaidId") .HasColumnType("int"); b.Property <DateTimeOffset?>("Time") .HasColumnType("datetimeoffset"); b.Property <string>("TimeZoneId") .HasColumnType("nvarchar(max)"); b.Property <string>("Title") .HasColumnType("nvarchar(max)"); b.HasKey("Id"); b.HasIndex("Id") .IsUnique(); b.HasIndex("PortalId"); b.HasIndex("RaidId"); b.HasIndex("Time"); b.ToTable("Polls", (string)null); }); modelBuilder.Entity("RaidBattlesBot.Model.PollMessage", b => { b.Property <int>("Id") .ValueGeneratedOnAdd() .HasColumnType("int"); SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property <int>("Id"), 1L, 1); b.Property <long?>("BotId") .HasColumnType("bigint"); b.Property <long?>("ChatId") .HasColumnType("bigint"); b.Property <int?>("ChatType") .HasColumnType("int"); b.Property <string>("InlineMessageId") .HasColumnType("nvarchar(max)"); b.Property <int?>("MessageId") .HasColumnType("int"); b.Property <DateTimeOffset?>("Modified") .HasColumnType("datetimeoffset"); b.Property <int>("PollId") .HasColumnType("int"); b.Property <byte?>("PollMode") .HasColumnType("tinyint"); b.Property <long?>("UserId") .HasColumnType("bigint"); b.HasKey("Id"); b.HasIndex("PollId"); b.HasIndex("ChatId", "MessageId"); b.ToTable("Messages", (string)null); }); modelBuilder.Entity("RaidBattlesBot.Model.Portal", b => { b.Property <string>("Guid") .HasColumnType("nvarchar(450)"); b.Property <string>("Address") .HasColumnType("nvarchar(max)"); b.Property <string>("Image") .HasColumnType("nvarchar(max)"); b.Property <decimal>("Latitude") .HasColumnType("decimal(18,15)"); b.Property <decimal>("Longitude") .HasColumnType("decimal(18,15)"); b.Property <DateTimeOffset?>("Modified") .HasColumnType("datetimeoffset"); b.Property <string>("Name") .HasColumnType("nvarchar(max)"); b.HasKey("Guid"); b.ToTable("Portals", (string)null); }); modelBuilder.Entity("RaidBattlesBot.Model.Raid", b => { b.Property <int>("Id") .ValueGeneratedOnAdd() .HasColumnType("int"); SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property <int>("Id"), 1L, 1); b.Property <string>("Description") .HasColumnType("nvarchar(max)"); b.Property <int?>("EggRaidId") .HasColumnType("int"); b.Property <DateTimeOffset?>("EndTime") .HasColumnType("datetimeoffset"); b.Property <string>("Gym") .HasColumnType("nvarchar(max)"); b.Property <decimal?>("Lat") .HasColumnType("decimal(18,15)"); b.Property <decimal?>("Lon") .HasColumnType("decimal(18,15)"); b.Property <DateTimeOffset?>("Modified") .HasColumnType("datetimeoffset"); b.Property <string>("Move1") .HasColumnType("nvarchar(max)"); b.Property <string>("Move2") .HasColumnType("nvarchar(max)"); b.Property <string>("Name") .HasColumnType("nvarchar(max)"); b.Property <string>("NearByAddress") .HasColumnType("nvarchar(max)"); b.Property <string>("NearByPlaceId") .HasColumnType("nvarchar(max)"); b.Property <int?>("Pokemon") .HasColumnType("int"); b.Property <string>("PossibleGym") .HasColumnType("nvarchar(max)"); b.Property <int?>("RaidBossLevel") .HasColumnType("int"); b.Property <DateTimeOffset?>("StartTime") .HasColumnType("datetimeoffset"); b.Property <string>("Title") .HasColumnType("nvarchar(max)"); b.HasKey("Id"); b.HasIndex("EggRaidId") .IsUnique() .HasFilter("[EggRaidId] IS NOT NULL"); b.ToTable("Raids", (string)null); }); modelBuilder.Entity("RaidBattlesBot.Model.ReplyNotification", b => { b.Property <long>("ChatId") .HasColumnType("bigint"); b.Property <long>("FromChatId") .HasColumnType("bigint"); b.Property <int>("FromMessageId") .HasColumnType("int"); b.Property <long?>("BotId") .HasColumnType("bigint"); b.Property <long?>("FromUserId") .HasColumnType("bigint"); b.Property <int?>("MessageId") .HasColumnType("int"); b.Property <DateTimeOffset?>("Modified") .HasColumnType("datetimeoffset"); b.Property <int?>("PollId") .HasColumnType("int"); b.HasKey("ChatId", "FromChatId", "FromMessageId"); b.HasIndex("MessageId"); b.HasIndex("PollId"); b.ToTable("ReplyNotifications", (string)null); }); modelBuilder.Entity("RaidBattlesBot.Model.Settings", b => { b.Property <int>("Id") .ValueGeneratedOnAdd() .HasColumnType("int"); SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property <int>("Id"), 1L, 1); b.Property <long>("Chat") .HasColumnType("bigint"); b.Property <int>("Format") .ValueGeneratedOnAdd() .HasColumnType("int") .HasDefaultValue(71108369); b.Property <DateTimeOffset?>("Modified") .HasColumnType("datetimeoffset"); b.Property <int>("Order") .HasColumnType("int"); b.HasKey("Id"); b.HasIndex("Chat"); SqlServerIndexBuilderExtensions.IncludeProperties(b.HasIndex("Chat"), new[] { "Format" }); b.ToTable("Settings", (string)null); }); modelBuilder.Entity("RaidBattlesBot.Model.TimeZoneSettings", b => { b.Property <int>("Id") .ValueGeneratedOnAdd() .HasColumnType("int"); SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property <int>("Id"), 1L, 1); b.Property <long>("ChatId") .HasColumnType("bigint"); b.Property <string>("TimeZone") .HasColumnType("nvarchar(max)"); b.HasKey("Id"); b.HasIndex("ChatId"); b.ToTable("TimeZoneSettings", (string)null); }); modelBuilder.Entity("RaidBattlesBot.Model.UserSettings", b => { b.Property <long>("UserId") .HasColumnType("bigint"); b.Property <decimal?>("Lat") .HasColumnType("decimal(18,15)"); b.Property <decimal?>("Lon") .HasColumnType("decimal(18,15)"); b.Property <string>("TimeZoneId") .HasMaxLength(32) .HasColumnType("nvarchar(32)"); b.HasKey("UserId"); b.ToTable("UserSettings", (string)null); }); modelBuilder.Entity("RaidBattlesBot.Model.Vote", b => { b.Property <int>("PollId") .HasColumnType("int"); b.Property <long>("UserId") .HasColumnType("bigint"); b.Property <long?>("BotId") .HasColumnType("bigint"); b.Property <string>("FirstName") .HasColumnType("nvarchar(max)"); b.Property <string>("LastName") .HasColumnType("nvarchar(max)"); b.Property <DateTimeOffset?>("Modified") .HasColumnType("datetimeoffset"); b.Property <int?>("Team") .HasColumnType("int"); b.Property <string>("Username") .HasColumnType("nvarchar(max)"); b.HasKey("PollId", "UserId"); b.HasIndex("PollId"); b.HasIndex("UserId"); b.ToTable("Votes", (string)null); }); modelBuilder.Entity("RaidBattlesBot.Model.VoteLimit", b => { b.Property <int>("PollId") .HasColumnType("int"); b.Property <int>("Vote") .HasColumnType("int"); b.Property <int>("Limit") .HasColumnType("int"); b.HasKey("PollId", "Vote"); b.ToTable("VoteLimits", (string)null); }); modelBuilder.Entity("RaidBattlesBot.Model.Notification", b => { b.HasOne("RaidBattlesBot.Model.Poll", "Poll") .WithMany("Notifications") .HasForeignKey("PollId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.Navigation("Poll"); }); modelBuilder.Entity("RaidBattlesBot.Model.Poll", b => { b.HasOne("RaidBattlesBot.Model.Portal", "Portal") .WithMany() .HasForeignKey("PortalId"); b.HasOne("RaidBattlesBot.Model.Raid", "Raid") .WithMany("Polls") .HasForeignKey("RaidId"); b.Navigation("Portal"); b.Navigation("Raid"); }); modelBuilder.Entity("RaidBattlesBot.Model.PollMessage", b => { b.HasOne("RaidBattlesBot.Model.Poll", "Poll") .WithMany("Messages") .HasForeignKey("PollId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.Navigation("Poll"); }); modelBuilder.Entity("RaidBattlesBot.Model.Raid", b => { b.HasOne("RaidBattlesBot.Model.Raid", "EggRaid") .WithOne("PostEggRaid") .HasForeignKey("RaidBattlesBot.Model.Raid", "EggRaidId"); b.Navigation("EggRaid"); }); modelBuilder.Entity("RaidBattlesBot.Model.ReplyNotification", b => { b.HasOne("RaidBattlesBot.Model.Poll", "Poll") .WithMany() .HasForeignKey("PollId"); b.Navigation("Poll"); }); modelBuilder.Entity("RaidBattlesBot.Model.Vote", b => { b.HasOne("RaidBattlesBot.Model.Poll", null) .WithMany("Votes") .HasForeignKey("PollId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); }); modelBuilder.Entity("RaidBattlesBot.Model.VoteLimit", b => { b.HasOne("RaidBattlesBot.Model.Poll", null) .WithMany("Limits") .HasForeignKey("PollId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); }); modelBuilder.Entity("RaidBattlesBot.Model.Poll", b => { b.Navigation("Limits"); b.Navigation("Messages"); b.Navigation("Notifications"); b.Navigation("Votes"); }); modelBuilder.Entity("RaidBattlesBot.Model.Raid", b => { b.Navigation("Polls"); b.Navigation("PostEggRaid"); }); #pragma warning restore 612, 618 }
protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Entity <Raid>(raidEntity => { raidEntity.ToTable("Raids"); raidEntity.HasKey(raid => raid.Id); raidEntity.HasOne(raid => raid.EggRaid).WithOne(raid => raid.PostEggRaid).HasForeignKey <Raid>(raid => raid.EggRaidId); raidEntity.Property(p => p.Lat).HasColumnType("decimal(18,15)"); raidEntity.Property(p => p.Lon).HasColumnType("decimal(18,15)"); }); modelBuilder.Entity <Poll>(pollEntity => { var pollIdSequence = modelBuilder.HasSequence <int>("PollId").StartsAt(10_000_000).IncrementsBy(1); pollEntity.ToTable("Polls"); pollEntity.Property(poll => poll.Id).HasDefaultValueSql($"NEXT VALUE FOR {pollIdSequence.Metadata.Name}"); pollEntity.HasIndex(poll => poll.Id).IsUnique(); pollEntity.HasIndex(poll => poll.Time); pollEntity.HasMany(poll => poll.Messages).WithOne(message => message.Poll).HasForeignKey(message => message.PollId); pollEntity.HasMany(poll => poll.Votes).WithOne().HasForeignKey(vote => vote.PollId); pollEntity.HasOne(poll => poll.Raid).WithMany(raid => raid.Polls).HasForeignKey(poll => poll.RaidId); pollEntity.HasOne(poll => poll.Portal).WithMany().HasForeignKey(poll => poll.PortalId); }); modelBuilder.Entity <PollMessage>(messageEntity => { messageEntity.ToTable("Messages"); messageEntity.HasKey(message => message.Id); messageEntity.Ignore(message => message.Chat); messageEntity.HasIndex(message => new { message.ChatId, MesssageId = message.MessageId }); }); modelBuilder.Entity <Vote>(voteEntity => { voteEntity.ToTable("Votes"); voteEntity.HasKey(vote => new { vote.PollId, User = vote.UserId }); voteEntity.Ignore(vote => vote.User); voteEntity.HasIndex(vote => vote.PollId); voteEntity.HasIndex(vote => vote.UserId); }); modelBuilder.Entity <Settings>(settingsEntity => { settingsEntity.ToTable("Settings"); settingsEntity.HasKey(settings => settings.Id); SqlServerIndexBuilderExtensions.IncludeProperties(settingsEntity.HasIndex(settings => settings.Chat), nameof(Settings.Format)); settingsEntity.Property(settings => settings.Format).HasDefaultValue(VoteEnum.Standard); }); modelBuilder.Entity <Portal>(builder => { builder.ToTable("Portals"); builder.HasKey(portal => portal.Guid); builder.Property(portal => portal.Latitude).HasColumnType("decimal(18,15)"); builder.Property(portal => portal.Longitude).HasColumnType("decimal(18,15)"); }); modelBuilder.Entity <Player>(builder => { builder.ToTable("Players"); builder.HasKey(player => player.UserId); builder.Property(player => player.UserId).ValueGeneratedNever(); }); modelBuilder.Entity <Notification>(builder => { builder.ToTable("Notifications"); builder.HasKey(notification => new { notification.PollId, notification.ChatId, notification.Type }); builder.HasOne(notification => notification.Poll) .WithMany(poll => poll.Notifications) .HasForeignKey(notification => notification.PollId); }); modelBuilder.Entity <ReplyNotification>(builder => { builder.ToTable("ReplyNotifications"); builder.HasKey(notification => new { notification.ChatId, notification.FromChatId, notification.FromMessageId }); builder.HasIndex(notification => notification.MessageId); builder.HasOne(notification => notification.Poll) .WithMany() .HasForeignKey(notification => notification.PollId); }); modelBuilder.Entity <UserSettings>(builder => { builder.ToTable("UserSettings"); builder.HasKey(settings => settings.UserId); builder.Property(settings => settings.UserId).ValueGeneratedNever(); builder.Property(settings => settings.TimeZoneId).HasMaxLength(32); builder.Property(p => p.Lat).HasColumnType("decimal(18,15)"); builder.Property(p => p.Lon).HasColumnType("decimal(18,15)"); }); modelBuilder.Entity <Friendship>(builder => { builder.ToTable("Friendship"); builder.HasKey(friendship => new { friendship.Id, friendship.FriendId }); builder.HasIndex(friendship => friendship.PollId); }); modelBuilder.Entity <TimeZoneSettings>(builder => { builder.ToTable(nameof(TimeZoneSettings)); builder.HasKey(settings => settings.Id); builder.HasIndex(settings => settings.ChatId); }); modelBuilder.Entity <VoteLimit>(builder => { builder.ToTable("VoteLimits"); builder.HasKey(vl => new { vl.PollId, vl.Vote }); builder .HasOne <Poll>() .WithMany(poll => poll.Limits) .HasForeignKey(limit => limit.PollId); }); }