Désactiver les références aux clés étrangères dans Effort

c# effort

Question

J'utilise Effort dans Visual Studio et C # pour recréer et tester à l'unité une base de données. J'écris une classe pour une seule table et je ne remplis donc que la base de données avec des objets de cette table. Mon problème est que la base de données Effort veut que les clés étrangères de l'objet fassent référence à des objets réels dans la base de données.

Mon erreur est

System.Data.Entity.Infrastructure.DbUpdateException: une erreur s'est produite lors de la mise à jour des entrées. Voir l'exception interne pour plus de détails.

System.Data.Entity.Core.UpdateException: une erreur s'est produite lors de la mise à jour des entrées. Voir l'exception interne pour plus de détails.

System.Reflection.TargetInvocationException: une exception a été levée par la cible d'un appel.

NMemory.Exceptions.ForeignKeyViolationException: violation de clé étrangère [Table1 :: SettingsId]. La valeur de clé [0] n'existe pas dans la table référencée [Table2 :: SettingsId] .. Code d'erreur: RelationError

Étant donné que cette table particulière contient de nombreuses clés étrangères pour des objets comportant de nombreuses autres clés étrangères, cela demanderait beaucoup de travail. Est-il possible, dans Effort, de désactiver cette option afin que je puisse tester ce tableau seul?

Réponse acceptée

J'ai rencontré ce problème aussi et je voulais tester la table dans le cadre de la plus grande base de données. Vous pouvez créer une méthode d'assistance qui instancie tout ce dont vous avez besoin et transmet la base de données ou la table avec les références. Cela aide car vous pouvez l’appeler à partir de la méthode / classe de test dont vous avez besoin et à tout moment.


Réponse populaire

Vous pouvez créer un nouveau fichier .edmx à partir de votre base de données à des fins de test uniquement. Par exemple:

Dans Visual Studio, sélectionnez Fichier-> Nouveau-> Données-> Entity DataModel. Sélectionnez "EF Designer from database". Choisissez ou créez une connexion à votre base de données SQL Server existante et enregistrez les paramètres de connexion dans app.config sous le nom "testConnectionString".

Dans le concepteur de modèle de données, supprimez toute relation de clé étrangère dont vous n'avez pas besoin. Enregistrez le concepteur et reconstruisez le projet.

Dans Effort, transmettez le nom de la chaîne de connexion (générée lors de la création du nouveau .edmx) à la méthode CreateTransient , comme CreateTransient :

EntityConnection connection = Effort.EntityConnectionFactory.CreateTransient("name=testConnectionString");

MyDbContext context = new MyDbContext(connection);

Cela devrait vous permettre d'insérer des valeurs dans la table sans avoir à renseigner les tables de clés étrangères associées.

Cela vient avec un avertissement, cependant - si le code que vous testez utilise des propriétés de navigation qui dépendent des clés étrangères, il échouera. Cela me fait me demander à quel point ce type de "tests unitaires" est précieux.




Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi