私はその時間で終わりです-編集者私はみんなを悩ませてきました。今すぐ削除する必要があります。大規模な時間スケジュールの削除またはExceptionHoursSetsの削除(一般的な時間パターンの例外)のいずれかです。各ExceptionHoursSetにはWeekSpecがあり、WeekSpecにはDaySpecのコレクション(その日の時間を含む)があります。したがって、明らかに、各例外セットをループして、削除のマークが付けられた日、週、およびセットを削除したいと思います。省略された方法は次のとおりです。
[HttpPost]
public ActionResult Edit(Schedule schedule, [Bind(Prefix = "ExceptionHoursSet")] List<ExceptionHoursSet> exceptionHoursSets)
{
using (var db = new HoursDb())
{
ViewBag.DayNames = HomeServices.DayNames;
if (ModelState.IsValid)
{
schedule.ExceptionHoursSets = exceptionHoursSets;
foreach (var exceptionHoursSet in exceptionHoursSets)
{
if (!exceptionHoursSet.IsDeleting)
{
exceptionHoursSet.WeekSpecId = exceptionHoursSet.WeekSpec.WeekSpecId;
// for coherency (should this be necessary?)
foreach (var daySpec in exceptionHoursSet.WeekSpec.DaySpecs)
{
db.Entry(daySpec).State = EntityState.Modified;
db.SaveChanges();
}
db.Entry(exceptionHoursSet.WeekSpec).State = EntityState.Modified;
db.SaveChanges();
db.Entry(exceptionHoursSet).State = EntityState.Modified;
db.SaveChanges();
}
else
{
var daySpecs = new List<DaySpec>(exceptionHoursSet.WeekSpec.DaySpecs);
db.ExceptionHoursSets.Attach(exceptionHoursSet);
db.WeekSpecs.Attach(exceptionHoursSet.WeekSpec);
foreach (var daySpec in daySpecs)
{
db.DaySpecs.Attach(daySpec);
db.DaySpecs.Remove(daySpec);
}
db.WeekSpecs.Remove(exceptionHoursSet.WeekSpec);
db.ExceptionHoursSets.Remove(exceptionHoursSet);
db.SaveChanges();
}
}
if (HasEditedException(lastExceptionHoursSet))
{
var dayNum = 0;
foreach (var daySpec in lastExceptionHoursSet.WeekSpec.DaySpecs)
{
daySpec.DayNum = dayNum++;
daySpec.DaySpecId = Guid.NewGuid();
db.DaySpecs.Add(daySpec);
}
lastExceptionHoursSet.WeekSpec.WeekSpecId = Guid.NewGuid();
db.WeekSpecs.Add(lastExceptionHoursSet.WeekSpec);
lastExceptionHoursSet.ExceptionHoursSetId = Guid.NewGuid();
exceptionHoursSets.Add(lastExceptionHoursSet);
db.ExceptionHoursSets.Add(lastExceptionHoursSet);
}
db.Entry(schedule).State = EntityState.Modified;
db.SaveChanges();
return RedirectToAction("Index");
}
return View(schedule);
}
}
削除しようとしたexceptionHoursSetにアタッチしようとすると、次のエラーが発生します。
参照整合性制約違反が発生しました:参照制約を定義するプロパティ値が、関係のプリンシパルオブジェクトと依存オブジェクトの間で一貫していません。
これは何ですか?そしてもっと要点を言えば、どうすればそれを取り除くことができますか?
我慢してくれてありがとう、ネイサン・ボンド