5

Un peu frustré ici. J'essaie de trouver un moyen de prendre en charge la mise à jour en cascade avec le framework d'entité, et il ne semble pas y avoir de méthode intégrée. La recherche sur le net montre essentiellement que vous ne devriez jamais changer une valeur de clé primaire, mais il existe des cas valides où vous devriez (par exemple, une valeur UPC comme clé primaire, et les codes à barres UPC deviennent plus grands, ce qui signifie ceux existants et en maintenant les bonnes relations avec les clés étrangères). Une approche est apparemment de puiser dans l'événement SavingChanges, de voir si les champs de clé primaire sont en train de changer, et si c'est le cas, de parcourir les propriétés de navigation et de mettre à jour les sous-tables de cette manière.Cadre d'entité et UPDATE CASCADE

Ceci, en théorie, fonctionnerait. Mais ça a l'air lourd. Quelqu'un a une meilleure idée? Je ne peux pas croire que Bill aurait laissé ces choses hors du cadre juste parce que la plupart des gens ne le font pas. SQL Server le prend toujours en charge ...

Thx!

+0

Qui est Bill ???? –

+0

La facture qui a commencé MS ... –

+0

voir MSDN: http://msdn.microsoft.com/en-us/library/bb738695.aspx – RPM1984

Répondre

2

Vous ne pouvez pas modifier directement la clé primaire via EF. Le problème est que EF fait des changements où la clé primaire = x. Donc vous ne pouvez pas changer x.

Vous pouvez exécuter une procédure stockée à partir de EF qui mettrait à jour une clé primaire. Dans votre cas avec les codes à barres, j'aurais une clé primaire qui est un numéro d'incrément automatique, puis un code à barres comme champ différent avec un index unique.

+0

Thx. Le truc du code à barres était un exemple, et je peux penser à beaucoup de scénarios (dans les systèmes existants) où le code à barres aurait été la clé primaire. C'était tout à fait logique jusqu'à ce qu'EF ait rejoint la ville. Je pense que la seule façon pour l'instant sera que les clés étrangères gèrent elles-mêmes la cascade, même si cela signifie que je devrai rafraîchir l'entité après une sauvegarde pour m'assurer que j'ai les bonnes données en mémoire. –