C# EF Core - ошибка ограничения FOREIGN KEY при сохранении - PullRequest
0 голосов
/ 23 апреля 2020

У меня проблема с сохранением моих изменений в базе данных. В моем коде я сохраняю объект отчета в базе данных. Но он выдает ошибку, что в одной из связанных таблиц ограничение FOREIGN KEY не выполняется. Я думаю, что я установил отношения хорошо для этих объектов, но я не уверен, что происходит.

Вот ошибка:

enter image description here

Мой вызов:

SetIdentity(nameof(Report));
await UpdateReport(req, report);
var newReport = await AddReport(req, report);
if (newReport != null) await this._context.SaveChangesAsync();
SetIdentity(nameof(Report), isOn: false);

Настройка объекта отчета:

modelBuilder.Entity<Report>(entity =>
            {
                entity.HasKey(e => e.ReportId)
                    .HasName("Pk_Report");

                entity.ToTable("Report", "common");

                entity.Property(e => e.CreatedDtm).HasDefaultValueSql("(getutcdate())");

                entity.Property(e => e.CreatedUser)
                    .IsRequired()
                    .HasMaxLength(254);

                entity.Property(e => e.ReportNm)
                    .IsRequired()
                    .HasMaxLength(255);

                entity.Property(e => e.StartEffDt)
                    .HasColumnType("date")
                    .HasDefaultValueSql("(getutcdate())");

                entity.Property(e => e.SystemTag)
                    .HasMaxLength(250)
                    .IsUnicode(false);

                entity.Property(e => e.UpdatedDtm).HasDefaultValueSql("(getutcdate())");

                entity.Property(e => e.UpdatedUser)
                    .IsRequired()
                    .HasMaxLength(254);

                entity.HasOne(d => d.Language)
                    .WithMany(p => p.Report)
                    .HasForeignKey(d => d.LanguageId)
                    .OnDelete(DeleteBehavior.ClientSetNull)
                    .HasConstraintName("Fk_Language_Report");

                entity.HasOne(d => d.ReportType)
                    .WithMany(p => p.Report)
                    .HasForeignKey(d => d.ReportTypeId)
                    .OnDelete(DeleteBehavior.ClientSetNull)
                    .HasConstraintName("Fk_ReportType_Report");
            });

Настройка объекта ReportCatalog:

modelBuilder.Entity<ReportCatalog>(entity =>
            {
                entity.ToTable("ReportCatalog", "common");

                entity.HasIndex(e => e.LanguageId)
                    .HasName("Ix_ReportCatalog_LanguageId_Fk");

                entity.HasIndex(e => e.ReportCatalogStatusCdId)
                    .HasName("Ix_ReportCatalogStatusCode_ReportCatalog_Fk");

                entity.HasIndex(e => e.ReportId)
                    .HasName("Ix_ReportCatalog_ReportID_Fk");

                entity.HasIndex(e => new { e.ReportId, e.LanguageId, e.VersionId, e.StartEffDt })
                    .HasName("Ix_ReportID_LanguageId_VersionId_StartEffDt_UI")
                    .IsUnique();

                entity.Property(e => e.CreatedDtm).HasDefaultValueSql("(getutcdate())");

                entity.Property(e => e.CreatedUser)
                    .IsRequired()
                    .HasMaxLength(254);

                entity.Property(e => e.FileName)
                    .IsRequired()
                    .HasMaxLength(255);

                entity.Property(e => e.PowerBigroupId).HasColumnName("PowerBIGroupId");

                entity.Property(e => e.PowerBireportId).HasColumnName("PowerBIReportId");

                entity.Property(e => e.ReportDisplayName)
                    .IsRequired()
                    .HasMaxLength(255);

                entity.Property(e => e.StartEffDt)
                    .HasColumnType("date")
                    .HasDefaultValueSql("(getutcdate())");

                entity.Property(e => e.UpdatedDtm).HasDefaultValueSql("(getutcdate())");

                entity.Property(e => e.UpdatedUser)
                    .IsRequired()
                    .HasMaxLength(254);

                entity.Property(e => e.VersionId).HasDefaultValueSql("((1))");

                entity.HasOne(d => d.Language)
                    .WithMany(p => p.ReportCatalog)
                    .HasForeignKey(d => d.LanguageId)
                    .OnDelete(DeleteBehavior.ClientSetNull)
                    .HasConstraintName("Fk_Language_ReportCatalog");

                entity.HasOne(d => d.ReportCatalogStatusCd)
                    .WithMany(p => p.ReportCatalog)
                    .HasForeignKey(d => d.ReportCatalogStatusCdId)
                    .OnDelete(DeleteBehavior.ClientSetNull)
                    .HasConstraintName("Fk_ReportCatalogStatusCode_ReportCatalog");

                entity.HasOne(d => d.Report)
                    .WithMany(p => p.ReportCatalog)
                    .HasForeignKey(d => d.ReportId)
                    .OnDelete(DeleteBehavior.ClientSetNull)
                    .HasConstraintName("Fk_Report_ReportCatalog");
            });

Настройка объекта ReportCatalogRole:

modelBuilder.Entity<ReportCatalogRole>(entity =>
            {
                entity.HasKey(e => new { e.ReportCatalogId, e.RoleId })
                    .HasName("Pk_ReportCatalogRole");

                entity.ToTable("ReportCatalogRole", "common");

                entity.Property(e => e.CreatedDtm).HasDefaultValueSql("(getutcdate())");

                entity.Property(e => e.CreatedUser)
                    .IsRequired()
                    .HasMaxLength(254);

                entity.Property(e => e.StartEffDt)
                    .HasColumnType("date")
                    .HasDefaultValueSql("(getutcdate())");

                entity.Property(e => e.UpdatedDtm).HasDefaultValueSql("(getutcdate())");

                entity.Property(e => e.UpdatedUser)
                    .IsRequired()
                    .HasMaxLength(254);

                entity.HasOne(d => d.ReportCatalog)
                    .WithMany(p => p.ReportCatalogRole)
                    .HasForeignKey(d => d.ReportCatalogId)
                    .OnDelete(DeleteBehavior.ClientSetNull)
                    .HasConstraintName("Fk_ReportCatalogRoles_ReportCatalog");
            });

Я что-то пропустил? Я не уверен, почему это ограничение не работает, когда я сохраняю только для объекта отчета.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...