我有两个用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");
}
}
此外,在调试过程中我有错误。我非常感谢你的帮助。我的错误和观点是在调试我的删除功能时出现的:
using (SalDBContext _dbContext = new SalDBContext()) {
此时我的对象dt
具有正确的属性DayTypeID
和NameDayType
。但是,属性Specialdays
会抛出异常类型
System.ObjectDisposedException System.Collections.Generic.ICollection {System.ObjectDisposedException}
然后我采取下一步措施。在线:
DayType daytype = _dbContext.DayTypes.FirstOrDefault(p => p.DayTypeID == dt.DayTypeID);
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
感谢任何有关我的问题的解决方案的帮助。谢谢