我有以下兩個實體:EF 4.1層疊在實體之間的兩個方向上兩個關係
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; }
}
一個比賽可以有0..N官員和官員必須有一個比賽鏈接到它。第二種關係是比賽可能有一個主場。
爲了使EF製作數據庫,我有以下時,正確理解這一點:
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);
}
如果我現在刪除一個比賽,有聯繫的那場比賽的所有官員都將被刪除,這是我想。但是,當我刪除在其中一場比賽中成爲正式官員的官員時,刪除不會引用刪除語句與Tournaments.OfficialID中的參考約束衝突。
你說得對。當我試圖在SMSS中刪除它時,EF當然無法爲我解決這個問題。一旦我在代碼中進行測試,它就不需要添加foreach循環。非常感謝。 – Mekswoll 2012-03-29 00:47:31
@pEkvo:順便說一句:如果它沒有foreach循環,那麼你可以扔掉'tournaments'變量並稍微簡化代碼:'ctx.Tournaments.Where(t => t.OfficialID == 5).Load )'。它只是將對象加載到上下文中,而不將對象返回給列表變量。 – Slauma 2012-03-29 14:02:17