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中,除非它返回空白记录。