实体对象未更新

时间:2013-11-11 20:40:24

标签: c# entity-framework

我创建了一个我想在各种项目中使用的静态类。我试图让它尽可能独立,但它没有更新,我没有收到任何错误消息。我正在使用.Net Framework 4.0客户端。

以下是代码:

using System;
using System.Linq;

namespace SSS.ServicesConfig.data
{
  public partial class GlobalSetting
  {

    public static GlobalSetting GetGlobalSetting()
    {
      try
      {
        using (var context = new SuburbanEntities())
        {
          return (from gs in context.GlobalSettings
                  select gs).FirstOrDefault();
        }
      }
      catch (Exception ex)
      {
        Logging.Log("An error occurred.", "GetGlobalSetting", Apps.ServicesConfig, ex);
        throw new Exception(string.Format("Unable to retrieve data: [{0}].", ex.Message));
      }
    }

    public static void SaveGlobalSettings(GlobalSetting globalSetting)
    {
      using (var context = new SuburbanEntities())
      {
        context.Attach(globalSetting);
        context.SaveChanges();
      }
    }
  }
}

附件没有以正确的方式完成吗?如果没有,我应该如何保存它?

4 个答案:

答案 0 :(得分:2)

您必须将状态设置为已修改:

  context.Attach(globalSetting);
  context.Entry(globalSetting).State = EntityState.Modified;
  context.SaveChanges();

答案 1 :(得分:1)

如果我理解正确的话,我建议你尝试在两种方法中删除using语句,并以这种方式声明上下文,或者更好的是保持本地上下文变量的私有变量。

     var context = new SuburbanEntities())
     context.Attach(globalSetting);
     context.SaveChanges();

答案 2 :(得分:1)

我知道您在ObjectContext API中,因此将实体标记为已更改的方式为:

context.ObjectStateManager
       .ChangeObjectState(globalSetting, EntityState.Modified);
将对象附加到上下文后

答案 3 :(得分:0)

必须将其标记为已修改,请尝试

context.Attach(globalSetting);
var gs = context.Entry(globalSetting);
gs.State = EntityState.Modified;
context.SaveChanges();