0

我创建了一个我想在各种项目中使用的静态类。我试图让它尽可能独立,但它没有更新,我也没有收到任何错误消息。我正在使用 .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

4 回答 4

2

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

  context.Attach(globalSetting);
  context.Entry(globalSetting).State = EntityState.Modified;
  context.SaveChanges();
于 2013-11-11T20:46:49.073 回答
1

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

     var context = new SuburbanEntities())
     context.Attach(globalSetting);
     context.SaveChanges();
于 2013-11-11T21:38:27.563 回答
1

我了解您在ObjectContextAPI 中,因此将实体标记为已更改的方法是:

context.ObjectStateManager
       .ChangeObjectState(globalSetting, EntityState.Modified);

将对象附加到上下文之后。

于 2013-11-11T23:10:32.487 回答
0

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

context.Attach(globalSetting);
var gs = context.Entry(globalSetting);
gs.State = EntityState.Modified;
context.SaveChanges();
于 2013-11-11T20:46:25.760 回答