0

我有以下的测试案例这可能是一个错误?

[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)); 

    } 

哪些测试从我的控制器下面的方法。

[HttpPost, ActionName("RemoveCourse")] 
    public ActionResult RemoveCourseConfirmed(Course course) 
    { 
     try 
     { 
      db.Entry(course).State = EntityState.Deleted; 
      db.SaveChanges(); 
      return RedirectToAction("Index"); 
     } 
     catch (DbUpdateConcurrencyException) 
     { 
      return RedirectToAction("RemoveMeet", new System.Web.Routing.RouteValueDictionary { { "concurrencyError", true } }); 
     } 
     catch (DataException) 
     { 
      ModelState.AddModelError(string.Empty, "Unable to save changes. Try again."); 
      return View(course); 
     } 

    } 

我知道我应该使用模拟分贝......但对于这个项目,我决定采用这种方法。

所以这会发生什么。当我运行实际的网站时,这个功能完全正常工作,并删除课程和所有属于它的会议。

但是当我运行测试我得到下面的异常

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>(); 

注释掉以下行并更换循环与以下内容:

foreach (var meet in db.Meets.ToList()) 
{ 
    Assert.IsFalse(meet.courseID == courseToDelete.courseID); 
} 

我没有得到任何异常和测试案例passess。

我错过了关于实体框架的东西还是这是一个错误?

+0

任何儿童表课程?据我所知,EF默认情况下不会删除子实体,而是将其外键设置为parent为空。看起来像那个错误信息。 – magnus 2012-04-05 18:39:36

+0

这就是我在互联网上找到的。但是当我运行真正的应用程序时,它删除了课程,它是从数据库中的孩子(couse会见)。当我删除线时,测试也会通过。 – keshav 2012-04-05 18:55:51

回答

0

好吧,这已经开放了一段时间了。我还没有能够找到一个明确的答案,但更多的工作与MVC和EF我认为正在发生的事情是,一旦我执行行

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

购买合乎得到加载到对象管理器,因此当父对象被删除,不再有父对象的引用。