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。
我錯過了關於實體框架的東西還是這是一個錯誤?
任何兒童表課程?據我所知,EF默認情況下不會刪除子實體,而是將其外鍵設置爲parent爲空。看起來像那個錯誤信息。 – magnus 2012-04-05 18:39:36
這就是我在互聯網上找到的。但是當我運行真正的應用程序時,它刪除了課程,它是從數據庫中的孩子(couse會見)。當我刪除線時,測試也會通過。 – keshav 2012-04-05 18:55:51