包装我的实体对象的类不保存

时间:2014-04-16 21:04:56

标签: c# .net entity

我可能会错误地解决这个问题,但这是我的实体对象包装的类:

using System;
using System.Linq;

namespace SSS.ServicesConfig.data
{
  public partial class GlobalSetting
  {
    private static GlobalSetting _globalSettings;

    public static GlobalSetting GlobalSettings
    {
      get
      {
        if (_globalSettings == null)
        {
          GetGlobalSetting();
        }
        return _globalSettings;
      }
    }

    private static void GetGlobalSetting()
    {
      try
      {      
        using (var subEntities = PpsEntities.DefaultConnection())
        {
          _globalSettings = (from x in subEntities.GlobalSettings
                            select x).FirstOrDefault();

          if (_globalSettings == null)
          {
            _globalSettings = new GlobalSetting();
            _globalSettings.GlobalSettingId = Guid.NewGuid();
            _globalSettings.CompanyCode = string.Empty;
            _globalSettings.CorporationId = Guid.Empty;
            _globalSettings.DefaultBranch = "01";
            _globalSettings.SourceId = Guid.Empty;
            _globalSettings.TokenId = Guid.Empty;
            subEntities.AddToGlobalSettings(_globalSettings);
            subEntities.SaveChanges();
          }
        }
      }
      catch (Exception ex)
      {
        Logging.Log("An error occurred.", "GetGlobalSetting", Apps.ServicesConfig, ex);
        throw new Exception(string.Format("Unable to retrieve data: [{0}].", ex.Message));
      }
    }

    internal static void SaveGlobalSettings()
    {
      using (var entities = PpsEntities.DefaultConnection())
      {
        entities.Attach(_globalSettings);
        entities.SaveChanges();
      }
    }
  }
}

我试图让它在必须通过我的班级获取设置记录并通过同一个班级保存。这是一个单独的项目,其他几个项目将要导入。

我的保存没有保存到数据库,我看到记录没有错误或更改。在这个特定的表中,只有一条记录,因此它也没有添加另一条记录。

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

首先,在将初始值分配给_globalSettings后,不会调用您的保存。

第二,您不应该尝试使用get访问器更改值。这是糟糕的形式。 http://msdn.microsoft.com/en-us/library/w86s7x04.aspx

我建议您将保存到数据库的责任分离到一个新方法(您可以通过将其公开来公开SaveGlobalSettings方法),但是如果您决定对用户进行模糊处理,那么我会建议从GlobalSettings属性的get访问器中删除保存到数据库,为GlobalSettings属性创建set访问器,并将保存放入GlobalSettings属性集访问器中的数据库。

另外请注意,您正在查杀堆栈跟踪。

throw new Exception(string.Format("Unable to retrieve data: [{0}].", ex.Message));

您仍然可以按照您的方式捕获并记录异常,但重新抛出异常,如下所示:

  catch (Exception ex)
  {
    Logging.Log("An error occurred.", "GetGlobalSetting", Apps.ServicesConfig, ex);
    throw;
  }

这将保留原始异常。