2014-04-16 3 views
0

я могу идти об этом неправильно, но это мой класс, я обернуть сущности объекта:класс, который оборачивает мой объект объект не сохраняет

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(); 
     } 
    } 
    } 
} 

Я пытаюсь сделать его там, где они должны идти через мой класс, чтобы получить запись настроек и сохранить ее, хотя тот же класс. Это отдельный проект, который импортирует несколько других проектов.

Мое сохранение не сохраняется в базе данных, и я не вижу ошибок или изменений в записи. В этой конкретной таблице есть только одна запись, поэтому она не добавляет еще одну запись.

Любые предложения?

+0

Когда вы поймаете ошибку, как этот путь, вы никогда не найдете проблему с корнем. вам нужен innenexception. –

+0

Я отлаживал его, и он не выдавал ошибку. Это происходит через 'SaveGlobalSettings()' без проблем. – ErocM

ответ

0

Сначала ваше сохранение не вызывается после того, как начальное значение присвоено _globalSettings.

Second Вы не должны пытаться изменить значение с помощью get accessor. Это плохая форма. http://msdn.microsoft.com/en-us/library/w86s7x04.aspx

Я рекомендую разделить ответственность сохранения в базу данных на новый метод (вы можете выставить метод SaveGlobalSettings, сделав его публичным), но если вы решили запутать сохранение от пользователя, а затем Я бы порекомендовал вам удалить сохранение в базу данных из get accessor свойства GlobalSettings, создать аксессуар набора для свойства 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; 
    } 

Это сохранит первоначальный исключение.

+0

Ваша первая мысль отчасти верна. Если я сделаю 'SaveGlobalSettings()' прежде, чем я получу, он будет пуст. Это не то, что происходит в этом случае. – ErocM

+0

Вторая мысль. Рекомендация, сохранение, которое вы видите, создает только пустую запись, сохраняет ее и возвращает ее, если запись не найдена. Сохранение не входит в get, за исключением случаев, когда оно возвращает пустую запись. – ErocM

Смежные вопросы