我在 Web 应用程序中使用 EF5 和 SQL Server 2012。我有两节课:
public partial class Topic {
public Topic()
{
this.SubTopics = new List<SubTopic>();
}
public int TopicId { get; set; }
public string Name { get; set; }
public int Number { get; set; }
public virtual ICollection<SubTopic> SubTopics { get; set; }
}
public partial class SubTopic
{
public int SubTopicId { get; set; }
public int TopicId { get; set; }
public string Name { get; set; }
public string Notes { get; set; }
public virtual byte[] Version { get; set; }
public virtual Topic Topic { get; set; }
}
在我们的前端,我们对 SubTopic Notes 进行了更改,然后当按下 Save 按钮时,Topic 对象及其 SubTopic 对象作为 JSON 发送回 Web API 控制器。当我们检查发回的内容时,我们会看到 Notes 的新数据。当我们检查参数主题时,我们还会看到新的 Notes 数据。
public HttpResponseMessage PutTopic(int id, Topic topic)
{
_uow.Topics.Update(topic);
_uow.Commit();
}
但是,使用 SQL Profiler 检查我们看不到任何更改子主题的情况。检索数据时,会返回旧的子主题数据,并且对注释的编辑会丢失。
对于这样的 Web 更新情况。EF 如何确定已更改的内容,是否有某种方法可以使它检查/比较新对象的内容,以便它可以检测到更改并更新子主题?
配置:
DbContext.Configuration.ProxyCreationEnabled = false;
DbContext.Configuration.LazyLoadingEnabled = false;
DbContext.Configuration.ValidateOnSaveEnabled = false;
DbContext.Configuration.ValidateOnSaveEnabled = true;
DbContext.Configuration.AutoDetectChangesEnabled = false;
更新方法:
public virtual void Update(T entity)
{
DbEntityEntry dbEntityEntry = DbContext.Entry(entity);
if (dbEntityEntry.State == EntityState.Detached)
{
DbSet.Attach(entity);
}
dbEntityEntry.State = EntityState.Modified;
}