C# 包装实体对象的类未保存

C# 包装实体对象的类未保存,c#,.net,entity,C#,.net,Entity,我可能做得不正确,但这是我的类,我包装了我的实体对象: using System; using System.Linq; namespace SSS.ServicesConfig.data { public partial class GlobalSetting { private static GlobalSetting _globalSettings; public static GlobalSetting GlobalSettings { g

我可能做得不正确,但这是我的类,我包装了我的实体对象:

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();
      }
    }
  }
}
我试着让他们通过我的课程获得设置记录,并通过同一个课程保存它。这是一个单独的项目,其他几个项目将要导入

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


有什么建议吗?

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

其次,您不应该尝试使用get访问器更改值。这是糟糕的形式。

我建议您将保存到数据库的责任分离到一个新方法(您可以通过公开SaveGlobalSettings方法),但是如果您决定混淆用户的保存,那么我建议您从GlobalSettings属性的get访问器中删除对数据库的保存,为GlobalSettings属性创建集访问器,并将保存到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;
  }

这将保留原始异常。

当您以这种方式捕获错误时,您将永远找不到根本问题。你需要InneException。我调试了它,它没有抛出错误。通过
SaveGlobalSettings()
,您的第一个想法完全正确。如果在执行get之前执行
SaveGlobalSettings()
,则它将为空。这不是本案中发生的情况。第二个想法指出。建议,您看到的保存操作只是创建一个空白记录,保存它,如果没有找到记录,则返回它。保存不在get中,除非它返回空白记录。