私のウェブサイト(C#)でEFを使い始めています。ユーザーはデータを作成または変更することができ、選択画面でデータを作成または変更できます(1ページ)。ユーザーが新しいデータを作成することを選択した場合、私は次のコードを実行します。EF経由でデータベースに新しいデータをコミットする。アタッチ/アペンドでエラーが発生する
Program newProg = new Program();
using (DatabaseEntities context = new DatabaseEntities())
{
Guid id = new Guid(list.SelectedValue);
var itemString = from item in context.Set where item.Id == id select item;
Item selectedItem = itemString.ToList()[0];
newProg.Items.Add(selectedItem);
context.AddToProgramSet(newProg);
context.Detach(newProg);
}
かなり多くのユーザーがに提出する準備ができるまで、各ユーザーコントロールに渡される「プログラム」の新しいインスタンスを作成しますデータベース。その時点で次のコードが実行されます:私はそこに着くとき
using (DatabaseEntities context = new DatabaseEntities())
{
context.AddToProgramSet(this.SummaryControl.SelectedProgram);
context.SaveChanges();
}
は残念ながら、私は、次のメッセージが表示されます。
それはすでにのEntityKeyを持っているので、オブジェクトがObjectStateManagerに追加することはできません。 ObjectContext.Attachを使用して、既存のキーを持つオブジェクトをアタッチします。この行で
:
またcontext.AddToProgramSet(this.SummaryControl.SelectedProgram);
、私は前に、前に次の行を追加する場合:
context.Attach(this.SummaryControl.SelectedProgram);
を、私はこのエラーを取得する:
ヌルのEntityKeyを持つオブジェクト値をオブジェクトコンテキストにアタッチすることはできません。
ご協力いただければ幸いです。ありがとう。
デイブ、応答いただきありがとうございます。私は最初のAddToProgramSet(newProg)をコメントアウトし、以前と同じエラーを受け取ります。 – dangerisgo
私がしようとしているのは、選択ページに行の新しいインスタンス(私の場合はプログラム)を作成し、それをユーザーコントロールに渡し、途中で入力してから最終ページに達すると、ポピュレートされた行を選択し、dbにプッシュします。 – dangerisgo
私はDangerIsGoで働いています。問題は、私たちがエンティティを識別するためにGUIDを使用しているという事実によって引き起こされますか?エンティティにIDの新しいGUIDを与えるように設定されたデフォルトのコンストラクタがあります。それも問題を引き起こしているのでしょうか? –