这看起来应该是很明显的,但是关于实体框架的一些事情让我感到困惑,我无法实现这个目标。如何在.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