Question

À la suite d'une publication de formulaire, j'essaie de sauvegarder un nouvel enregistrement de marque. À mon avis, le genre est une liste déroulante renvoyant un entier, qui est renseigné à partir de ViewData ("sexe").

J'ai configuré mon lien comme suit:

gID = CInt(Request.Form("Gender"))
Brand.GenderReference.EntityKey = New EntityKey("DB_ENTITIES.Gender", "Id", gID)
TryUpdateModel(Brand)
DB.SaveChanges()

Ce qui entraîne l'erreur suivante.

Entities in 'DB_ENTITIES.Brand' participate in the 'FK_Brand_Gender' relationship. 0 related 'Gender' were found. 1 'Gender' is expected.

Quelqu'un pourrait-il m'expliquer les paramètres en anglais clair? J'ai aussi essayé DB.Gender en tant que premier paramètre, mais pas de joie.

Était-ce utile?

La solution

Plutôt que de créer une EntityKey, créez un objet Sexe de talon (désolé je ne suis pas un gars de VB, donc en C #):

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

Ensuite, vous attachez le genre au EntitySet approprié (le nom de la propriété sur la DB à partir de laquelle vous obtenez les entités de genre est la chaîne ci-dessous):

DB.AttachTo("Genders",g);

Ceci place la base de données dans l'état où le genre est dans le ObjectContext dans l'état non modifié sans requête à la base de données. Maintenant, vous pouvez construire une relation comme d'habitude

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

C'est tout ce qu'il y a à faire. Inutile de vous amuser avec EntityKeys

J'espère que cela vous aidera

Alex

Autres conseils

Il vous faut une instance de marque et de sexe, puis définissez Brand.Gender sur l’instance de genre. Ensuite, vous pouvez enregistrer sans problèmes.

Ok, voici ce que j'ai inventé au lieu d'utiliser updateModel. De toute façon, il semble que cela pose un problème / potentiellement un risque pour la sécurité, des champs potentiellement supplémentaires étant ajoutés ultérieurement. Une nouvelle instance de genre peut être instanciée via trygetObjectByKey. Cela fonctionne jusqu'à présent. Toute autre suggestion permettant à UpdateModel de mettre à jour l'objet de propriété Gender est appréciée.

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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top