Dans Alex James' Entity Framework tips articles, (qui sont excellents en passant), il parle de how to fake foreign key properties. Cela semble exactement ce dont j'ai besoin, mais pour une raison quelconque, je ne peux pas sembler le retirer quand je suis mise à jour. Je les éléments suivants dans la partie de mise à jour de mon contrôleur:Faking mises à jour de clé étrangère en utilisant les clés d'entité
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Edit(candidates candidateToEdit)
{
string EduIDValue = candidateToEdit.education.ID.ToString();
if (!ModelState.IsValid)
return View();
try
{
var originalCandidate = (from c
in model.candidates
where c.ID == candidateToEdit.ID select c).FirstOrDefault();
//attempting it here
originalCandidate.educationReference.EntityKey = new System.Data.EntityKey("model.education", "ID", candidateToEdit.education.ID);
model.ApplyPropertyChanges(originalCandidate.EntityKey.EntitySetName, candidateToEdit);
model.SaveChanges();
return RedirectToAction("Index");
}
catch(Exception e)
{
Response.Write("Education ID Value " + EduIDValue + "<br /><br />Error: <br /><br />" + e);
return null;
//return View();
}
}
Cela échoue et recrache les éléments suivants:
System.ArgumentException: Le membre avec « modèle » d'identité n'existe pas dans la collection de métadonnées. Nom du paramètre: identity à System.Data.Metadata.Edm.MetadataCollection 1.GetValue(String identity, Boolean ignoreCase) at System.Data.Metadata.Edm.ReadOnlyMetadataCollection
1.GetValue (String identity, Boolean ignoreCase) à System.Data.Metadata.Edm.ItemCollection.GetEntityContainer (nom de chaîne, Boolean ignoreCase) à System.Data.Metadata .Edm.ItemCollection.GetEntityContainer (nom de chaîne) à System.Data.Metadata.Edm.MetadataWorkspace.GetEntityContainer (nom de chaîne, DataSpace dataSpace) à System.Data.EntityKey.GetEntitySet (MetadataWorkspace metadataWorkspace) à System.Data.Objects.DataClasses. EntityReference.set_EntityKey (EntityKey value) à InternshipTest.Controllers.CandidatesController.Edit (candidats candidateToEdit) dans C: \ Documents and Settings \ graham \ Mes documents \ Visual Studio 2008 \ Projects \ InternshipTest \ InternshipTest \ Controllers \ CandidatesController.cs: ligne 84
Ce qui n'a aucun sens pour moi, le modèle est certainement le nom de l'EntitySet.
Heureux que vous aimez la série. BTW il y avait un bug d'exception de référence NULL dans le blog, que je viens de corriger. –