【发布时间】:2017-01-31 18:32:54
【问题描述】:
我遇到了一个问题,可以删除表中的记录,但前提是该表没有子外键关系。现在,当我们有一个父表并想使用 EF 删除记录时,它会失败并显示错误“无法更改关系,因为一个或多个外键属性不可为空”。我已经删除了引用父表的子表上的级联删除。我已经在 SSMS 中对其进行了测试。它工作正常。但从 C# 内部它失败了。我们有一个视图模型,我们在其中定义了一个通用的 DeleteRow 方法。这很好用,只要被删除的行没有子表。如果表是父表,则失败。我尝试在 Stackoverflow 上查找答案并遇到了这个问题,现已关闭:stackoverflow.com/questions/17723276/delete-a-single-record-from-entity-framework。这个问题的答案使用了 EF 中的离散表。我们正在使用泛型。这是我们的代码:
public void DeleteRow(T row)
{
if (App.MainDataContext != null && row != null)
{
App.MainDataContext.Entry<T>(row).State = EntityState.Deleted;
App.MainDataContext.SaveChanges();
}
}
我不相信将 State 属性设置为枚举 EntityState.Deleted 是有效的,因为这只是为父表中的记录设置它,而不是为子表中的任何相关记录设置它。 (MainDataContext 是 .EDMX 文件中的实体。)当我们使用泛型传递表类型时,如何使用 EF 6 从任何表中删除单个记录?
【问题讨论】:
-
this 怎么样?实际上我看到它与您提供的链接相同。您只需要翻译它,例如:
App.MainDataContext.Set<T>().Attach(row); App.MainDataContext.Set<T>().Remove(row);
标签: c# sql-server entity-framework generics