У меня проблема с сохранением моих изменений в базе данных. В моем коде я сохраняю объект отчета в базе данных. Но он выдает ошибку, что в одной из связанных таблиц ограничение FOREIGN KEY не выполняется. Я думаю, что я установил отношения хорошо для этих объектов, но я не уверен, что происходит.
Вот ошибка:
Мой вызов:
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");
});
Я что-то пропустил? Я не уверен, почему это ограничение не работает, когда я сохраняю только для объекта отчета.