在不重新查询数据库的情况下添加关系

时间:2011-11-09 23:31:30

标签: c# optimization entity-framework-4 linq-to-entities

我知道我已经看过这个,但我无法在任何地方找到它。

我有几个具有多对多关系的对象:人和部门。一个人可以有很多部门,反之亦然。

我以为是:

var person = //query user

var d = new Department();
d.Id = 123;

person.Departments.add(d);

这会在数据库中创建一个新部门并链接它们,但这不是我想要的。该部门已经存在。我只是想创造这种关系。如何在不重新查询数据库以获取部门实例的情况下执行此操作?

2 个答案:

答案 0 :(得分:1)

试试这个:

var department = dbContext.Departments.FirstOrDefault(d => d.Id == 123);
person.Departments.Add(department);
dbContext.SaveChanges();

在调用dbContext.SaveChanges()之前,不应查询数据库,因为使用了延迟查询。但是,如果这不起作用,您可以尝试直接更新映射实体:

var departmentMember = new DepartmentMember
                           {
                               DepartmentId = 123,
                               MemberId = person.Id
                           };

dbContext.DepartmentMembers.Add(departmentMember);
dbContext.SaveChanges();

答案 1 :(得分:0)

怎么样:

person.Departments.Add(context.Departments.First(c=>c.Id==123));