我遇到了實體框架未持久更改數據庫的問題。我使用靜態方法來加載一些值,並且Entity上下文被扔掉(在using語句中)。在實體框架中持續進行的WPF更改
然後將對象加載到WPF DataGrid中,供最終用戶操作。
當用戶完成更改時,按下「更新」按鈕並將對象列表發送回數據層以保存到數據庫。我可以看到在UI中更改的對象反映了它們的新值(即不是數據綁定問題)。
我會假設,因爲加載對象的實體上下文已經被處理掉了,我應該把這些對象附加到新創建的上下文中。正確?當我這樣做時,修改對象的實體狀態(我可以看到這是狀態設置)變爲「未更改」。數據庫沒有任何內容。
我錯過了什麼?
這裏是加載和更新值碼:
public static List<SSIS_Configuration> GetConfigurationValuesForTenant(string tenantKey, SqlConnectionString connectionString)
{
List<SSIS_Configuration> configStrings = new List<SSIS_Configuration>();
if (connectionString.IsValid())
{
try
{
using (SSISFrameworkEntities entities = new SSISFrameworkEntities(connectionString.ToEDMXString("SSISFramework.SSISFramework")))
{
string configFilterStartingValue = "CommonConfig_" + tenantKey;
configStrings = (from configString in entities.SSIS_Configurations
where configString.ConfigurationFilter.StartsWith(configFilterStartingValue)
select configString).ToList();
}
}
catch { }
}
return configStrings;
}
public static void UpdateConfigurations(List<SSIS_Configuration> configurations, SqlConnectionString connectionString)
{
if (connectionString.IsValid())
{
try
{
using (SSISFrameworkEntities entities = new SSISFrameworkEntities(connectionString.ToEDMXString("SSISFramework.SSISFramework")))
{
foreach (SSIS_Configuration config in configurations)
{
entities.Attach(config);
}
entities.SaveChanges();
}
}
catch { }
}
}
嘗試在App.Current.Properties [「context」]之類的位置保持上下文。除非它們是自我跟蹤實體,否則即使您附加使用新的上下文,也不會注意到這些更改。 –
我的首選是將我的上下文保存在Unity等IoC容器中。然後我可以設置參數來控制生命週期。然後可以使用構造器注入來確保所有視圖模型都可以訪問上下文對象。 – Winger
@Dustin,我不知道這是否適合我的解決方案,因爲此代碼存儲在類庫中以供不同的終端UI解決方案使用。雖然主要用於Windows WPF客戶端,但它很可能會被控制檯應用程序和Silverlight應用程序使用。 App.Current何時可用? –