这似乎应该很明显,但是关于实体框架的一些事情让我感到困惑,我无法让它发挥作用。
很简单,我有三个表,其中 Id 值是标识列:用户 (userId, username) 类别 (categoryId, categoryName) JoinTable (UserId, CategoryId) 复合。
在实体设计器(这是 .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.
我显然无法理解插入了多少对多的关系。我错过了什么?