円形の依存関係を生成する:EFコア複数のナビゲーションプロパティは、私は、次のマッピング構成を有する
エントリークラス:
entity
.HasOne(e => e.CurrentHandling)
.WithOne()
.HasForeignKey<Entry>(e => e.CurrentHandlingID)
;
entity
.HasMany(e => e.Handlings)
.WithOne(h => h.Entry)
.HasForeignKey(h => h.EntryID)
;
取り扱いクラス:
entity
.HasOne(h => h.Entry)
.WithMany(e => e.Handlings)
.HasForeignKey(h => h.EntryID)
.OnDelete(Microsoft.EntityFrameworkCore.Metadata.DeleteBehavior.Restrict);
私はコンテキストを保存しようとすると、私は次の例外を取得:
のSystem.InvalidOperationException:「循環依存関係が保存されるデータで検出されたため、変更を保存することができません。」のForeignKey:Entry.CurrentHandlingID - >をHandling.HandlingIDユニークなToPrincipal:CurrentHandling、ForeignKey:Handling.EntryID - > Entry.EntryID ToDependent:ハンドリングToPrincipal:Entry '。'
テストデータ:
errorRepo.EnableBulkModus();
var handling = errorRepo.AddHandling(new Handling {
CorrectedMessage = "correct",
HandlingStatusID = 7,
Updated = DateTime.UtcNow,
UpdatedBy = nameof(DbInitializer)
});
var reference = errorRepo.AddReference(new Reference {
ForeignKeyTypeID = 4,
ForeignKeyValue = "42",
Name = "SystemB",
ReferenceTypeID = 6
});
var entry = errorRepo.AddEntry(new Entry {
CurrentHandling = handling,
DisplayMessage = "Wrong!",
ErrorMessage = "error!",
Inserted = DateTime.UtcNow.AddMinutes(-5),
OriginalMessage = "incorrect",
InsertedBy = nameof(DbInitializer),
UUID = Guid.NewGuid(),
Reference = reference,
StatusID = 5
});
handling.Entry = entry;
entry.Handlings.Add(handling);
errorRepo.DisableBulkModus(true);
errorRepo.EnableBulkModus();
セットだけフラグerrorRepo.DisableBulkModus(true);
とCommitChanges()
同じ呼び出したときに保存しないようリポジトリを示し、それはフラグをfalseに設定します。ブール値は、リポジトリがCommitChanges()
を実行する必要があることを示しています。
循環依存性を避けるためにマッピングを変更する必要がありますか?
種類よろしく。
EDIT(2017年3月11日)
Iは取り扱いクラスのマッピングを除去し、エントリークラスの線.OnDelete(Microsoft.EntityFrameworkCore.Metadata.DeleteBehavior.Restrict)
を追加:
entity
.HasMany(e => e.Handlings)
.WithOne(h => h.Entry)
.HasForeignKey(h => h.EntryID)
.OnDelete(Microsoft.EntityFrameworkCore.Metadata.DeleteBehavior.Restrict)
;
同じ例外を:
System.InvalidOperationException: '循環依存関係が保存されるデータで検出されたため、変更を保存できません:' ForeignKey:Entry.Curr EntHandID - > Entry.EntryID ToDependent:HandLings ToPrincipal:Entry "。"
EDIT(11.03.2017)を参照してください。 – Mario