LINQ-TO-SQL Refresh()在某些外部数据库更新(如ExecuteCommand())后不更新对象的关联

时间:2011-07-22 03:54:33

标签: linq-to-sql

假设我有一个名为Department的实体,我是从MyDataContext检索的。 Department有一个名为Employees的协会。

我想在部门添加一堆新员工。我没有使用会导致多个查询的LINQ,而是使用:

进行一次批量插入
MyDataContext.ExcecuteCommand(
"Insert INTO Employee (DeptID, etc…), (DeptID, etc…), (DeptID, etc…)"
);

现在我的Department对象对这些更改一无所知,特别是Employees属性,因为Department.Employees.Count()返回0

我已尝试以下两项操作来刷新以更新部门及其相关的员工:

MyDataContext.Refresh(RefreshMode.OverwriteCurrentValues, Department);
MyDataContext.Refresh(RefreshMode.OverwriteCurrentValues, Department.Employees);

但仍然是Department.Employees.Count()返回0

我知道数据实际上已正确添加,因为如果我创建一个新的DataContext并获取Department实体,则Department.Employees.Count()= 3

如何在不使用新的DataContext的情况下更新MyDataContext或现有的Department实体?

(我在整个请求中使用一个DataContext,并使用它执行几个不同的数据操作,因此很难尝试引入另一个DataContext)

1 个答案:

答案 0 :(得分:7)

不幸的是,根据this post,Refresh()不会重新加载关联。建议的解决方法是:

Department.Employees.Clear();
Department.Employees.AddRange(MyContext.Employees.Where(x=>x.DeptID=Department.DeptID))