TLDR の概要
ASP.net MVC の InsertOnSubmit() 関数にいくつか問題があります。重要な制約にぶつかることなく、新しいオブジェクトを構築してデータベースに挿入するにはどうすればよいでしょうか?
再現する手順
私は先に進んで、私が抱えていた 3 つほどの主要な問題の簡単なデモを作成しました。誰かがここで私を助けてくれるかもしれません。
- 新しい ASP.net MVC 2 プロジェクトを作成します。
- 1 対多のリレーションシップを使用して、実験と結果の 2 つのテーブルを作成します (以下を参照)。
- 「RunExperiment」と呼ばれるホーム コントローラー内に新しいアクションを作成します。
- 基本的な linq-to-sql データ コンテキストを作成します。
- RunExperiment で新しい実験と結果を生成し、それらを新しいデータ コンテキストを介してデータベースに挿入します。
主キーの重複を防ぎ、依存関係がそのまま維持されるようにするために必要な魔法があるため、このプロセスはすぐに崩壊します。
ここで、サンプルの "RunExperiment" 関数を見てみましょう。
public ActionResult RunExperiment(string Title, string Scientist)
{
RepositoryDataContext RDC = new RepositoryDataContext();
// Generate the experiment
Experiment thisExperiment = new Experiment();
thisExperiment.experimentTitle = Title;
thisExperiment.experimentScientist = Scientist;
// Perform some work.
System.Threading.Thread.Sleep(500);
// Attempt to insert the experiment.
// Works once, fails subsequently due to duplicate primary key.
RDC.Experiments.InsertOnSubmit(thisExperiment);
RDC.SubmitChanges();
for (int i = 0; i < 5; i++)
{
Result thisResult = new Result();
thisResult.resultDate = DateTime.Now;
thisResult.resultTemp = i;
thisResult.Experiment = thisExperiment;
RDC.Results.InsertOnSubmit(thisResult);
RDC.SubmitChanges();
}
return View("Index");
}
何かご意見は?これが基本的なことであることはわかっていますが、Nerd Dinner パターンをコピーするだけでは解決しようとしていますが、これらのエラーが発生しています。
ありがとう!