Asp.net mvc 3 这可能是一只虫子吗?

Asp.net mvc 3 这可能是一只虫子吗?,asp.net-mvc-3,visual-studio-2010,entity-framework,unit-testing,Asp.net Mvc 3,Visual Studio 2010,Entity Framework,Unit Testing,我有下面的测试用例 [TestMethod()] [DeploymentItem("Courses.sdf")] public void RemoveCourseConfirmedTest() { CoursesController_Accessor target = new CoursesController_Accessor(); int id = 50; ActionResult actual;

我有下面的测试用例

    [TestMethod()]
    [DeploymentItem("Courses.sdf")]
    public void RemoveCourseConfirmedTest()
    {

        CoursesController_Accessor target = new CoursesController_Accessor();
        int id = 50;

        ActionResult actual;
        CoursesDBContext db = target.db;
        Course courseToDelete = db.Courses.Find(id);

        List<CourseMeet> meets = courseToDelete.meets.ToList<CourseMeet>();

        actual = target.RemoveCourseConfirmed(courseToDelete);
        foreach (var meet in meets)
        {
            Assert.IsNull(db.Meets.find(meet));
        }
        Assert.IsNull(db.Courses.Find(courseToDelete.courseID));

    }
我知道我应该使用模拟数据库。。。。但对于这个项目,我决定采用这种方法

这就是发生的事情。当我运行实际的网站时,这个功能工作得非常好,删除了课程和所有属于它的会议

但是当我运行测试时,我得到以下异常

System.InvalidOperationException: The operation failed: The relationship could not be
changed because one or more of the foreign-key properties is non-nullable. When a change is
made to a relationship, the related foreign-key property is set to a null value. If the
foreign-key does not support null values, a new relationship must be defined, the foreign-
key property must be assigned another non-null value, or the unrelated object must be
deleted.
如果我从测试中注释掉下面的一行,这里是更有趣的部分

List<CourseMeet> meets = courseToDelete.meets.ToList<CourseMeet>();
我没有得到任何异常和测试用例通过


我是否遗漏了实体框架的某些内容,或者这是一个bug?

好吧,这已经打开一段时间了。我仍然没有找到一个明确的答案,但我认为,随着MVC和EF的进一步合作,一旦我执行了命令,就会发生什么

List<CourseMeet> meets = courseToDelete.meets.ToList<CourseMeet>();
List meets=courseToDelete.meets.ToList();

会议将加载到对象管理器中,因此当父对象被删除时,将不再有对父课程的引用。

是否有课程的子表?据我所知,默认情况下,EF不会删除子实体,而是将它们的外键parent设置为null。在错误信息上看起来是这样的。这是我在互联网上找到的。但当我运行actuall应用程序时,它会从数据库中删除课程及其子项(couse meets)。而且,当我移除线路时,测试也通过了。
foreach (var meet in db.Meets.ToList())
{
    Assert.IsFalse(meet.courseID == courseToDelete.courseID);
}
List<CourseMeet> meets = courseToDelete.meets.ToList<CourseMeet>();