Ich habe die folgenden zwei Entitäten:EF 4.1 Cascading in zwei Richtungen zwischen Einheiten mit zwei Beziehungen
public class Tournament {
public int TournamentID { get; set; }
public String Name { get; set; }
public int? OfficialID { get; set; }
public virtual Official HeadOfficial { get; set; }
public virtual ICollection<Official> Officials { get; set; }
}
public class Official {
public int OfficialID { get; set; }
public String Surname { get; set; }
public String FirstName { get; set; }
public int TournamentID { get; set; }
public virtual Tournament Tournament { get; set; }
}
Ein Turnier 0..N Beamten haben kann und ein HAS offizielle ein Turnier mit ihm verbunden sein. Die zweite Beziehung ist, dass ein Turnier eine official haben kann.
Um die EF richtig dies zu machen interpretieren, wenn die Datenbank machen ich folgendes haben:
protected override void OnModelCreating(DbModelBuilder modelBuilder) {
modelBuilder.Entity<Tournament>()
.HasOptional(t => t.HeadOfficial)
.WithMany()
.HasForeignKey(t => t.OfficialID);
modelBuilder.Entity<Tournament>()
.HasMany(t => t.Officials)
.WithRequired(o => o.Tournament)
.HasForeignKey(o => o.TournamentID);
}
Wenn ich jetzt ein Turnier löschen, alle Beamten, die an diesem Turnier verknüpft wurden, gelöscht, das, was ich wollen. Wenn ich jedoch einen Offiziellen lösche, der in einem der Turniere zum offiziellen Offiziellen ernannt wurde, wird beim Löschen nicht davon ausgegangen, dass die Löschanweisung mit der Referenzbeschränkung in Turnieren.OffizielleID in Konflikt stand.
Sie haben Recht. Als ich versuchte, es in der SMSS zu löschen, gab es natürlich keine Möglichkeit für die EF, das für mich zu lösen. Sobald ich es im Code getestet habe, funktionierte es, ohne die foreach-Schleife hinzufügen zu müssen. Vielen Dank nochmal. – Mekswoll
@pEkvo: BTW: Wenn es ohne die foreach-Schleife funktioniert, dann kannst du die "Turniere" -Variable wegwerfen und den Code etwas vereinfachen: 'ctx.Tournaments.Where (t => t.OfficialID == 5) .Load () '. Es lädt nur die Objekte in den Kontext, ohne die Objekte zu einer Listenvariablen zurückzugeben. – Slauma