从数据库集删除失败

时间:2017-10-20 20:03:11

标签: c# entity-framework ef-code-first

我有两个用EF CodeFirst编写的表:

public class DayType
{
    [Key]
    public int DayTypeID { get; set; }
    public string NameDayType { get; set; }        
    public virtual ICollection<SpecialDay> Specialdays { get; set; }
    public DayType() { }
}

public class SpecialDay
{
    [Key]
    public int SpecialDayID { get; set; }
    public int Year { get; set; }
    public int JanuaryDay { get; set; }
    public SpecialDay() { }
    public int? DayTypeId { get; set; }
    public virtual DayType daytype { get; set; }
}

DBContext关系一对多由FluentAPI制作:

modelBuilder.Entity<SpecialDay>()
            .HasRequired(p => p.daytype)
            .WithMany(p => p.Specialdays);

我有DayType的CRUD操作表单,当用户按下删除按钮时,它调用对象RelayCommand,然后SelectedDayType(Binding -correct,INotifyPropertyChanged - 已实现)转到下一个删除功能:

internal void Delete(DayType dt)
{          
    using (SalDBContext _dbContext = new SalDBContext())
    {
        try
        {
            DayType daytype = _dbContext.DayTypes.FirstOrDefault(p => p.DayTypeID == dt.DayTypeID);

            _dbContext.Entry(dt).Collection(c=>c.Specialdays).Load();
            _dbContext.DayTypes.Remove(dt);
            _dbContext.SaveChanges();
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.ToString(), "Error");
        }

        MessageBox.Show("Deleted");
    }
}   

此外,在调试过程中我有错误。我非常感谢你的帮助。我的错误和观点是在调试我的删除功能时出现的:

  1. using (SalDBContext _dbContext = new SalDBContext()) {
  2. 此时我的对象dt具有正确的属性DayTypeIDNameDayType。但是,属性Specialdays会抛出异常类型

      

    System.ObjectDisposedException System.Collections.Generic.ICollection {System.ObjectDisposedException}

    1. 然后我采取下一步措施。在线:

      DayType daytype = _dbContext.DayTypes.FirstOrDefault(p => p.DayTypeID == dt.DayTypeID);

    2. daytype已核心显示所有属性。但是

      之后
      `_dbContext.Entry(dt).Collection(c=>c.Specialdays).Load();` 
      

      它捕获异常

        

      无法为属性“Specialdays”调用“加载”成员,因为上下文中不存在“DayType”类型的实体。要向上下文添加实体,请调用DbSet的Add或Attach方法。 System.InvalidOperationException

      3)当我尝试仅运行时:

        _dbContext.DayTypes.Remove(dt);
        _dbContext.SaveChanges(); 
      

      抛出下一个异常

        

      “无法删除该对象,因为在ObjectStateManager中找不到该对象。” System.InvalidOperationException

      感谢任何有关我的问题的解决方案的帮助。谢谢

0 个答案:

没有答案