フォーム投稿の結果として、私は新しいBrandレコードを保存しようとしています。私の考えでは、Genderはドロップダウンで、ViewDataから取り込まれたIntegerを返します( "gender")。
次のようにリンクを設定しました。
gID = CInt(Request.Form("Gender"))
Brand.GenderReference.EntityKey = New EntityKey("DB_ENTITIES.Gender", "Id", gID)
TryUpdateModel(Brand)
DB.SaveChanges()
これにより、次のようなエラーが発生します。
Entities in 'DB_ENTITIES.Brand' participate in the 'FK_Brand_Gender' relationship. 0 related 'Gender' were found. 1 'Gender' is expected.
誰かが私に平易な英語でパラメータを説明してもらえますか。私はDB.Genderも最初のパラメータとして試しましたが、喜びはありません。
EntityKeyを作成するのではなく、スタブGenderオブジェクトを作成します(申し訳ありませんが、C#ではVBの人ではありません)。
Gender g = new Gender{ID = Int32.Parse(Request.Form("Gender"))};
次に、Genderを適切なEntitySet
添付します(Genderエンティティを取得するDB
上のプロパティの名前は以下の文字列です)。
DB.AttachTo("Genders",g);
これにより、データベースは照会されずに、GenderがObjectContext
内の変更されていない状態になります。これで、通常どおりに関係を構築できます
brand.Gender = g;
DB.AddToBrand(brand);
DB.SaveChanges();
それだけです。 EntityKeys
をいじる必要はありません。
お役に立てれば
必要なのはBrandとGenderの両方のインスタンスで、次にBrand.GenderをGenderのインスタンスに設定します。その後、問題なく保存できます。