我使用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对象,只是删除了SQL抛出的两者之间的关系,因为它不能有空键。
显然我应该使用类似的东西 context.DeleteObject(人)
然而,在课程对象中,它没有引用上下文,我想将代码保留在对象中,以保持ui代码的简单。
答案 0 :(得分:1)
而不是使用课程类来管理数据库操作;在使用实体框架时,最好使用存储库和单元工作模式。否则,您的实体总是带有上下文;这将导致一些问题。
只需创建一个以上下文作为参数的课程资源库,并使用资源库中的数据库操作而不是实体本身。参考: Unit of Work and repository patterns