Dernièrement j’ai dû travailler avec des tables relationnelles qui ont comme clé étrangère (foreign key) des champs qui ne sont pas des entiers (int). Hors, il existe un petit problème dans la version 3.5 du Framework .Net avec ce genre de pratique.
Si les clés étrangères ne sont pas des entiers (dans mon cas c’était un Guid), vous allez vous heurter à un petit problème lors de la modification ou de la suppression (update ou delete). Un message d’erreur apparaîtra pour vous indiquer : « Specified cast is not valid ». Ce qui vous empêchera de mettre à jour vos enregistrements ou de les supprimer.
Il existe toutefois une manière de se sortir de ce problème. La méthode que je suggère vous permettra de supprimer et de mettre à jour vos données. Cependant, elle vous demandera un peu plus de travail pour l’ajout de nouveaux enregistrements.
Très simple : Vous devez supprimer l’association manuellement dans votre .dbml.
En supprimant cette association, cela implique que vous ne pourrez plus insérer des enregistrements relationnels à l’aide de la méthode « add » de votre objet de table primaire.
Vous allez devoir les ajouter directement à votre contexte.
Rassurez-vous, ce problème sera réglé avec la version 4.0 du .Net Framework. Il devrait voir le jour en mars 2010.