使用RIA服务和实体框架通过导航属性从数据库表中删除实体

时间:2011-05-30 21:36:03

标签: entity-framework wcf-ria-services

我有3个规范化的表,包括Employees,Departments和EmployeesToDepartments。我希望能够将一个Employee分配给一个或多个Department,因此链接表(EmployeesToDepartments)。我可以使用

成功查询数据库并通过导航属性提取实体的完整层次结构
this.ObjectContext.Employees.Include("EmployeesToDepartments").Include("EmployeesToDepartments.Department")

加上元数据中的[Include]属性,从而允许我访问给定Employee的Departments。在尝试删除[EmployeesToDepartments]表中[Employee]和[Department]之间的链接时,我收到了外键约束错误。

我简化了我的模型,只在[Employees]和[EmployeesToDepartments]之间包含一个导航属性。 [Employees]。[ID]和[EmployeesToDepartments]。[IDEmployee]之间的外键约束阻止我更新EmployeesToDepartments表。通过关系设置删除此功能后,我现在可以更新表格。我现在可以执行以下代码

foreach (var rel in _employee.EmployeesToDepartments)
{
    _employee.EmployeesToDepartments.Remove(rel);
}

_domainContext.SubmitChanges();

没有错误。

我原本希望看到RelEmployeesToDepartments中有IDEmployee的条目已被删除。我在表中看到的是IDEmployee以前的值0。

是否可以强制发出DELETE语句?我在这里误解了基本概念吗?

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

删除导航属性中的实体只会破坏实体之间的链接。您必须从EntitySet中删除才能获得所需内容 EX) myDomainContext.EmployeeDepartments.Remove(employeeDepartmentToRemove); myDomainContext.SubmitChanges();