EntityReference change key
A partir de Northwind, je voulais rajouter à la classe Product la méthode suivante :
public void SetCategory(int categoryID)
{
// ???
}
Le problème c'est que depuis la classe Product, on n'ai pas censé connaître le contexte auquel Product est attaché (d'ailleurs, il peut n'être attaché à aucun contexte). Il n'est donc pas possible de passer par la propriété Category. En effet, lors de l'affectation d'une catégorie obtenue à partir d'un autre contexte, on aurait une exception.
L'idée est donc d'utiliser la propriété CategoryReference de type System.Data.Objects.DataClasses.EntityReference<Category> et sur laquelle on a une propriété EntityKey. Il suffit ensuite de changer la valeur de l'EntityKey.
L'EntityKey a une propriété EntityKeyValues de type System.Data.EntityKeyMember[]. Dans notre cas, la clé de Category est uniquement constituée de la colonne CategoryID. On pourrait donc être tenté de faire :
CategoryReference.EntityKey.EntityKeyValues[0].Value = categoryID;
Mais cela ne marche pas ! En effet, l'EntityKeyMember est immutable (ie, il n'est pas possible de modifier la propriété Key ou Value une fois qu'elle a été affectée).
La solution consiste donc à recréer complètement l'EntityKey :
CategoryReference.EntityKey = new EntityKey("NorthwindEntities.Categories", "CategoryID", categoryID);
Ce post vous a plu ? Ajoutez le dans vos favoris pour ne pas perdre de temps à le retrouver le jour où vous en aurez besoin :