【问题标题】:Entity Framework SaveChanges() not working?实体框架 SaveChanges() 不起作用?
【发布时间】:2010-07-13 10:34:35
【问题描述】:

我在 Visual Studio 2008 中使用实体框架,确定它是 .NET Framework 和 VS 本身的 SP1。我的应用程序是在 n 层环境中开发的。第一步,我将数据从上下文转换为集合并序列化给用户。

HRMSDBContext context = new HRMSDBContext();

List<InHouseTrainingHead> heads = context.InHouseTrainingHead.ToList<InHouseTrainingHead>();

foreach (InHouseTrainingHead head in heads)
{
    context.Detach(head);
}

return heads;

用户更改一些数据并单击保存后,此列表返回保存方法。

HRMSDBContext context = new HRMSDBContext();

foreach (InHouseTrainingHead head in lists)
{
    context.Attach(head);
    context.ApplyPropertyChanges(head.EntityKey.EntitySetName, head);
}

context.SaveChanges();

不幸的是,在 SaveChanges() 之后什么都没有发生。我该如何解决这个问题?

【问题讨论】:

    标签: entity-framework c#-3.0


    【解决方案1】:

    为了扩展 Daniel Brückner 的答案 - 在您的示例中发生的情况是您试图在 ApplyPropertyChanges 对象和自身之间进行 ApplyPropertyChanges。显然,没有任何更改,因此没有保存任何内容。但是,如果您不想从数据库中获取记录,您可以手动将新附加实体的EntityState 设置为Modified。在这种情况下,它将保存在数据库中:

    HRMSDBContext context = new HRMSDBContext();
    
    foreach (InHouseTrainingHead head in lists)
    {
        context.Attach(head);
        ObjectStateEntry addedEntity = context.ObjectStateManager.GetEntry(head);
        addedEntity.ChangeState(EntityState.Modified);
    }
    
    context.SaveChanges();
    

    【讨论】:

      【解决方案2】:

      您没有按照预期的方式使用ObjectContext.ApplyPropertyChanges。您需要实体的两个实例 - 一个附加到上下文的未修改实例和一个分离的已修改实例。然后将更改应用于未修改的附加实体,它会被修改,您可以保存更改。因此,在调用ObjectContext.ApplyPropertyChanges 之前,您不能附加修改后的实体,而是从数据库中加载实体。

      【讨论】:

        猜你喜欢
        • 2017-05-09
        • 1970-01-01
        • 1970-01-01
        • 2021-09-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-05-03
        相关资源
        最近更新 更多