私は正しい用語を知らないので、これを正しく説明しているのかさえわかりません。また、EF 4.0 と 4.1 のどちらを使用しているかもわかりません。
DB から生成されたエンティティ モデルがあります。私のDBには、 と の間に1対多の関係がSurvey
ありAnswer
ます。私のデータ レイヤーはSurvey
、モデルから (サブコレクションを使用して) オブジェクトを取得Answers
し、Web サービスを介してフロントエンドに送信し、そこで更新されます (調査データと関連する回答の両方が更新される場合があります)。これはエンティティモデルから「切り離された」オブジェクトと呼ばれていると思いますか?
とにかく、編集後、データレイヤーに送り返されて保存されますが、ここに問題があります。ここSOの他の質問への回答に基づいて、次の3つのオプションを実行するのにうんざりしています。
public bool updateSurvey(Survey surv)
{
Survey target = entity.Surveys.FirstOrDefault(p => p.id == surv.id);
if (target == null)
return false;
//first try - exception at commented line
target.ownerID = surv.ownerID;
target.question = surv.question;
target.title = surv.title;
//target.Answers = surv.Answers;
//second try - replace commented line above with this - different exception
target.Answers.Clear();
foreach (var item in surv.Answers)
{
target.Answers.Add(item);
}
//third try - replace whole above block with this line
entity.Surveys.ApplyCurrentValues(surv);
try
{
entity.SaveChanges();lse;
}
catch (Exception)
{
return false;
}
return true;
}
surv
上記の 3 回目の試行では、最終的に例外はスローされませんでしたが、更新された回答は保存されませんでした (この場合は変更しなかったため、の他のプロパティについてはわかりません)。
要するに、これSurvey
と添付されているすべてAnswer
の s を保存するにはどうすればよいでしょうか。回答を手動でループして、それぞれを保存する必要がありますか? この場合の原子性はどうですか?