一部のデータを削除しようとしていますが(とにかく、どれほど難しいですか?)、モデルオブジェクトから複雑なタイプのプロップを削除すると、ICollectionプロップの内容も混在します。コードは次のとおりです。
[HttpPost, ActionName("Delete")]
public ActionResult DeleteConfirmed(string name)
{
using (var db = new HoursDb())
{
db.Configuration.ProxyCreationEnabled = false;
var schedule = db.Schedules.Where(s => s.ScheduleId == name)
.Include(s => s.WeekSpec)
.Include(s => s.WeekSpec.DaySpecs)
.Include(s => s.ExceptionHoursSets)
.Include(s => s.ExceptionHoursSets.Select(e => e.WeekSpec))
.Include(s => s.ExceptionHoursSets.Select(e => e.WeekSpec.DaySpecs))
.FirstOrDefault();
if (schedule == null)
{
return View("404");
}
var daySpecs = new List<DaySpec>(schedule.WeekSpec.DaySpecs);
foreach (var daySpec in daySpecs)
{
db.DaySpecs.Remove(daySpec);
}
db.WeekSpecs.Remove(schedule.WeekSpec);
var exceptionHoursSets = new List<ExceptionHoursSet>(schedule.ExceptionHoursSets);
foreach (var exceptionHoursSet in exceptionHoursSets)
{
daySpecs = new List<DaySpec>(exceptionHoursSet.WeekSpec.DaySpecs);
foreach (var daySpec in daySpecs)
{
db.DaySpecs.Remove(daySpec);
db.SaveChanges();
}
db.WeekSpecs.Remove(exceptionHoursSet.WeekSpec);
db.SaveChanges();
db.ExceptionHoursSets.Remove(exceptionHoursSet);
}
db.Schedules.Remove(schedule);
db.SaveChanges();
return RedirectToAction("Index");
}
}
私がラインを発射する前に
db.WeekSpecs.Remove(schedule.WeekSpec);
ExceptionHoursSetsには、たとえば3つの項目があります。WeekSpecを削除すると、ゼロになります。ええ 何か案は?
アップデート
HoursDbクラスのコードは次のとおりです。
using System.Data.Entity;
using LibraryAdmin.Models;
using System.Data.Entity.ModelConfiguration.Conventions;
namespace ####.DAL
{
public class HoursDb : DbContext
{
public DbSet<DaySpec> DaySpecs { get; set; }
public DbSet<WeekSpec> WeekSpecs { get; set; }
public DbSet<ExceptionHoursSet> ExceptionHoursSets { get; set; }
public DbSet<Schedule> Schedules { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
}
}
}
また、役立つ場合は、DaySpecsに一般的な建物の営業時間と営業時間が含まれています。それらはWeekSpecsに含まれています。
スケジュールには、一般的な営業時間を説明するWeekSpecと、一連のExceptionHoursSetが含まれています。
これらには、前述の一般時間の例外を説明するWeekSpecがあります。