LINQ-TO-SQL的Refresh()方法在执行ExecuteCommand()等外部数据库更新操作后不能更新对象的关联。

7
假设我有一个名为Department的实体,从MyDataContext中检索到它。Department有一个名为Employees的关联。
我想向一个Department添加一堆新的员工。不使用LINQ,这将导致多个查询,我使用以下代码进行批量插入:
MyDataContext.ExcecuteCommand(
"Insert INTO Employee (DeptID, etc…), (DeptID, etc…), (DeptID, etc…)"
);

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

我尝试了以下两种方法来刷新并更新Department及其相关的Employees:

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

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

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

如何更新MyDataContext或我的现有Department实体而不使用新的DataContext?

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

1个回答

7

不幸的是,根据此帖子,Refresh()方法无法重新加载关联。建议的解决方法是:

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

我已经试了几天了,一直在努力弄清楚这个问题。谢谢! - John M. Wright

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接