我试图删除foreach循环中的子对象,但这似乎不起作用..这就是我所拥有的。 我有一个会议和meeting_category实体,它们具有一对多的关系..
foreach (meeting_category meetingCategory in currentMeeting.meeting_category)
{
dbContext.meeting_category.Remove(meetingCategory);
dbContext.Entry(meetingCategory).State = EntityState.Deleted;
dbContext.SaveChanges();
}
然后我返回相同的视图并更新结果..这似乎非常不一致。有时它删除实体,有时则不删除实体。即使删除它,我的会议对象仍然有我删除的meeting_category对象。
如果不从DB中删除,它会更新会议对象并从会议中删除meeting_category对象。 是否有任何类型的重置或刷新,以便会议对象删除meeting_category对象。 如何确保它始终从DB和会议对象中删除meeting_category对象,当我返回到视图时,我有一个更新的会议对象?
这是我的会议实体
public partial class meeting
{
public meeting()
{
this.meeting_questions = new HashSet<meeting_questions>();
this.meeting_abstract = new HashSet<meeting_abstract>();
this.meeting_category = new HashSet<meeting_category>();
this.meeting_image = new HashSet<meeting_image>();
}
public int meeting_id { get; set; }
public int language_id { get; set; }
public string meeting_code { get; set; }
public string meeting_name { get; set; }
public string meeting_description { get; set; }
public System.DateTime meeting_start_date { get; set; }
public System.DateTime meeting_end_date { get; set; }
public System.DateTime abstract_cutoff_date { get; set; }
public string meeting_guidelines { get; set; }
public string created_by { get; set; }
public Nullable<System.DateTime> created_datetime { get; set; }
public Nullable<bool> meeting_published { get; set; }
public Nullable<bool> meeting_deleted { get; set; }
public Nullable<bool> meeting_fully_created { get; set; }
public virtual language language { get; set; }
public virtual ICollection<meeting_questions> meeting_questions { get; set; }
public virtual ICollection<meeting_abstract> meeting_abstract { get; set; }
public virtual ICollection<meeting_category> meeting_category { get; set; }
public virtual ICollection<meeting_image> meeting_image { get; set; }
}
这是我的meeting_category实体
public partial class meeting_category
{
public meeting_category()
{
this.abstract_category = new HashSet<abstract_category>();
}
public int meeting_category_id { get; set; }
public int meeting_id { get; set; }
public int category_type_id { get; set; }
public int category_id { get; set; }
public string category_name { get; set; }
public string category_name_en { get; set; }
public virtual ICollection<abstract_category> abstract_category { get; set; }
public virtual category category { get; set; }
public virtual category_type category_type { get; set; }
public virtual meeting meeting { get; set; }
}
答案 0 :(得分:0)
关于你想要实现的目标,我有几个问题。
首先你确定会议 - &gt;类别关系是多对一的?我通常希望它是多对多的,即每个会议可以有很多类别,每个类别可以附加到许多会议。
其次,您实际上是在尝试删除类别,还是在尝试从会议中删除类别?
如果您只是想删除会议和类别之间的关系,则需要编辑导航属性,即MyMeeting.Categories.Remove(MyCategory)。
如果您要删除实际的类别,则需要确保该类别当前未链接到任何会议,否则如果您尝试删除类别,则会收到外键违规。
除此之外,您可能会遇到chaching或仅仅是对象生命周期管理问题。
您创建了哪种类型的应用程序? ASP.NET?的WinForms?等
您如何实际实例化DBContext的具体版本?你在使用DI吗?
干杯迈克
答案 1 :(得分:0)
我设法通过在加载视图之前创建每个控制器动作的DbContext并销毁它来解决问题。 问题是我在另一个类中创建DbContext并在所有控制器操作上重用相同的上下文。由于实体被缓存在dbcontext中,我总是得到实体的旧缓存副本,并且工作非常不一致。