エンティティフレームワークがDBに変更を永続化させないという問題があります。私は静的メソッドを使用していくつかの値を読み込み、Entityコンテキストをスローします(usingステートメント内)。WPFでエンティティフレームワークを使用して変更を永続化する
オブジェクトはWPF DataGridにロードされ、そこでエンドユーザーが操作できます。
ユーザが変更を完了すると、「更新」ボタンが押され、オブジェクトのリストがデータ層に戻されてDBに保存されます。 UIで変更されたオブジェクトが新しい値を反映していることがわかります(データバインディングの問題ではありません)。
オブジェクトをロードしたエンティティコンテキストが破棄されてから、これらのオブジェクトを新しく作成されたコンテキストに永続化する必要があると思います。正しい?これを行うと、変更されたオブジェクトのエンティティ状態(状態が設定されていることがわかります)が「変更なし」に変更されます。 DBには何も保持されません。
私は行方不明ですか?ここで
は、値をロードし、更新するためのコードです:あなたはコンテキストからロードされたエンティティを変更しようとしている場合は、コンテキストを処分するべきではありませんので
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はいつ利用可能ですか? –