這看起來應該是很明顯的,但是關於實體框架的一些事情讓我感到困惑,我無法實現這個目標。如何在.net實體框架中插入或更新多對多的表格
很簡單,我有三個表,其中ID值標識列: 用戶(用戶ID,用戶名) 分類(的categoryId,類別名) JoinTable(用戶ID,類別ID)的複合材料。
在實體設計器(這是.net 4.0)中,當我導入這些表時,如預期那樣,連接表不出現,但用戶和類別顯示關係。下面的代碼:
var _context = new MyContext();
var myUser = new User();
myUser.UserName = "joe";
var myCategory = new Category();
myCategory.CategoryName = "friends";
_context.Users.AddObject(myUser);
myUser.Categories.Add(myCategory);
var saved = _context.SaveChanges();
返回一個錯誤(雖然沒有被添加到數據庫中):
An item with the same key has already been added.
如果我添加保存之前如下:
_context.Categories.AddObject(myCategory);
myCategory.Users.Add(myUser);
我得到的同樣的錯誤,沒有保存到數據庫。如果我保存MYUSER和myCategory對象嘗試將它們聯繫起來之前,他們兩個都節省,但第二保存引發錯誤,什麼也沒有添加到連接表:
Cannot insert the value NULL into column 'UserId', table '...dbo.JoinTable'; column does not allow nulls. INSERT fails. The statement has been terminated.
,我明顯沒有理解多少插入許多關係。我錯過了什麼?
什麼是你的ID屬性的類型? – 2010-02-11 13:51:20
int,標識 – 2010-02-11 17:06:54
仍試圖找出。通過向連接表(DateCreated)添加一個虛假的第三個字段,我可以強制實體設計器顯示連接表。然後我可以定義這些關係: var myJoin = new JoinTable {UserId = myUser.UserId,CategoryId = myCategory.CategoryId}; 然後,以下內容將在保存時正確插入: _context.Categories.AddObject(myCategory); myCategory.JoinTables.Add(myJoin); myJoin.User = myUser; – 2010-02-11 19:39:52