[英]Ef6, Many to many, Inserts and Primary keys
對於在多對多關系中的聯結表中填充正確的值,我遇到了問題。 在下圖中,我簡化了我想做的事情。 “左側的表”在數據庫中具有我要使用的值。 右邊的表即將接收新記錄。 它具有“交匯點”表的導航屬性,左側的表也是如此。 聯結表的背面都有兩個表的導航屬性,並將它們設置為required 。
在右側表中創建新記錄時,我還將在聯結表中添加到記錄中。 已知TOL_ID是因為它已保存在數據庫中,但是TOR_ID將要創建,因此未知。 當我嘗試在我的上下文中調用SaveChanges時,它將嘗試先保存聯結表記錄,然后再為右側的記錄填充TOR_ID。 雖然我將導航屬性標記為Required會使EF理解創建聯結表行之前TOR_ID必須存在。 相反,它嘗試插入現有的TOL_ID和0,這在嘗試在連接到同一TOL_ID的正確記錄上插入許多表時會出現沖突。
注意:不能先保存TOR_ID,然后再與聯結記錄進行連接,因為聯結表記錄的創建是“ Slowing Changeing Dimensions ”類型6流的一部分。
這就是代碼中的樣子:
// The newRating is the new object corresponding the Table on the right
var newRating = new ModuleRating()
{
// The moduleRating.RatedDriveUnit already exists in the db
RatedDriveUnit = moduleRating.RatedDriveUnit
};
newModule.Ratings.Add(newRating);
如果您遵循Code First,則以下課程將有所幫助
public class TOL
{
[Key]
public int TOL_ID { get; set; }
public int Col1 { get; set; }
public ICollection<TOR> Tors { get; set; }
}
public class TOR
{
[Key]
public int TOR_ID { get; set; }
public int Col1 { get; set; }
public ICollection<TOL> Tols { get; set; }
}
public class TolTorContext : DbContext
{
public DbSet<TOL> Tols { get; set; }
public DbSet<TOR> Tors { get; set; }
}
如果您遵循數據庫優先方法,請在Join Table中創建FK並嘗試更改ID名稱TOLId,TORId
很抱歉花您的時間。 經過一番調查后,我注意到連接表的假定復合唯一索引(TOL_ID和TOR_ID)被設置為錯誤。 而是將兩個單獨的唯一索引應用於TOL_ID和TOR_ID,一旦這兩個值之一出現兩次,就會導致約束沖突。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.