7

フォーム投稿の結果、新しいブランド レコードを保存しようとしています。私の見解では、Gender はドロップダウンであり、ViewData("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 も最初のパラメーターとして試しましたが、喜びはありません。

4

3 に答える 3

18

EntityKey を作成するのではなく、スタブ Gender オブジェクトを作成します (申し訳ありませんが、私は VB の専門家ではありませんので、C# で作成します)。

Gender g = new Gender{ID = Int32.Parse(Request.Form("Gender"))};

次に、Gender を適切なものにアタッチします( Gender エンティティを取得するEntitySetプロパティの名前は、以下の文字列です)。DB

DB.AttachTo("Genders",g);

ObjectContextこれにより、データベースは、データベース クエリなしでGender が変更されていない状態になります。これで、通常どおりの関係を構築できます

brand.Gender = g;
DB.AddToBrand(brand);
DB.SaveChanges();

それだけです。いじる必要はありませんEntityKeys

お役に立てれば

アレックス

于 2009-06-18T16:29:32.477 に答える
1

必要なのは、Brand と Gender の両方のインスタンスで、Brand.Gender を Gender のインスタンスに設定します。その後、問題なく保存できます。

于 2009-06-18T09:37:12.500 に答える
0

updateModelを使用する代わりに、私が思いついたものをここに示します。投稿に追加される可能性のあるフィールドがあるため、とにかく問題がある/潜在的にセキュリティリスクがあるようです。Genderの新しいインスタンスは、trygetObjectByKeyを介してインスタンス化できます。これは今のところ機能しています。UpdateModelにGenderプロパティオブジェクトを更新させるためのその他の提案はありがたいです。

Dim cID As Integer
cID = CInt(Request.Form("Gender"))
Dim key As New EntityKey(DB.DefaultContainerName() & ".Gender", "ID", cID)

Dim objGenderDS As New Gender
'Bring back the Gender object.
If DB.TryGetObjectByKey(key, objGenderDS) Then
Brand.GenderReference.EntityKey = key
Brand.Gender = objGenderDS
DB.AddToBrand(Brand)
DB.SaveChanges()
Else
End If
于 2009-06-18T11:49:15.620 に答える