内删除子对象我已经使用EF生成类为我的数据库表:EF从父对象
public partial class Course
{
public Course()
{
this.People = new HashSet<People>();
}
public int ID { get; set; }
public string Name { get; set; }
public virtual ICollection<Person> People { get; private set; }
}
public partial class Person
{
public int ID { get; set; }
public string Name { get; set; }
public virtual Course Course { get; set; }
}
正如你可以看到每个课程都有人收藏。我创建了第二个部分类,以便在刷新EF图时我的代码不会被清除。我的问题是如何清除课程对象中的人员列表?
我想:
public partial class Course
{
public void ResetCourse()
{
this.People.Clear();
}
}
,但我得到这个错误:
操作失败:关系不能被改变,因为一个或多个外键的属性是不可为空。当对关系进行更改时,相关的外键属性将设置为空值。如果外键不支持空值,则必须定义新的关系,必须为外键属性指定另一个非空值,或者必须删除不相关的对象。
这显然是因为EF实际上并没有删除person对象而只是删除了因为它不能有null键而抛出的SQL之间的关系。
显然我应该使用类似 context.DeleteObject(人)
但是过程中反对它没有参照上下文,我想保持物体内部的代码,以保持它的简单的UI码。
我碰巧使用工作单元的方法,所以你是说我应该把一个函数内部的更新课程和删除人?我同意这样做会工作,但是我的代码比我在这里给出的要多得多,如果我在哪里把所有更新的代码放在UOW中,它将会变得巨大并且很难在后来管理。你碰巧有链接到任何示例UOW模式,涵盖这样的事情? (现在去搜索) – Jammy
实际上你并没有在UOW中放置一个函数。您只需为CRUD操作(或其他需要的操作)创建存储库类。但是所有的操作都是使用UOW持久化的,这使得能够以事务处理的方式执行所有操作。 – daryal