簡體   English   中英

Ef6,多對多,插入和主鍵

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM