【发布时间】:2011-10-26 13:38:05
【问题描述】:
我对 EF 和 STE 还很陌生,但最近我偶然发现了一个痛苦的点,我想知道其他人是如何处理它的...
例如,假设我有两个 STE:Employee 和 Project。这是一个多对多的关系。每个实体都有一个到另一个实体的导航属性(即 Employee.Projects 和 Project.Employees)。
在我的 UI 中,用户可以创建/编辑员工并将其与多个项目相关联。当用户准备好提交时,员工列表将被传递到服务器进行保存。但是,如果一个 Employee 没有被添加到“保存列表”(即它被丢弃),但与一个或多个项目建立了关联,则 ApplyChanges 扩展方法能够“复活”该 Employee 对象,因为它是“连接的” " 通过与项目的关联到对象图。
我的“保存”代码如下所示:
public void UpdateEmployees(IEnumerable<Entities.Employee> employees)
{
using (var context = new EmployeeModelContainer(_connectionString))
{
foreach (var employee in employees)
{
context.Employees.ApplyChanges(employee);
}
context.SaveChanges();
}
}
通过使用 FK 来操作此处所述的关联,我现在已经能够在其他对象图上避免此问题:http://blogs.msdn.com/b/diego/archive/2010/10/06/self-tracking-entities-applychanges-and-duplicate-entities.aspx
当涉及到多对多关联和导航属性时,如何处理?
谢谢。
【问题讨论】:
-
你如何解雇员工?您是否将其标记为已删除?可以显示该代码吗?
-
@Wouter de Kort 指出丢弃(不包括)实体没有任何意义。您必须将其显式设置为已删除,否则仍会通过对其他实体的引用进行跟踪。
-
感谢您的回复!目前,通过“丢弃”,我的意思是我根本没有将它包含在传递给 save 方法的列表中。我同意你们两个。正如您所指出的,实体仍然可以通过对象引用进行跟踪,这会导致问题......也许将其标记为已删除是最好的方法。我想知道其他人是如何处理的。
标签: entity-framework c#-4.0 entity-framework-4 self-tracking-entities