J'ai une bibliothèque de classe que j'utilise depuis plus d'un an et qui a récemment cessé de fonctionner après la mise à niveau vers EF 6.1.
J'ai essayé diverses méthodes pour transmettre la chaîne de connexion à mon constructeur de classe Context mais, même s'il semble passer correctement la chaîne, je reçois invariablement:
'((((System.Data.Entity.DbContext) (contexte)). Database.Connection) .ServerVersion' a levé une exception de type 'System.InvalidOperationException'
et l'état de la connexion reste fermé.
Voici mon AppConfig:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
<!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 --></configSections>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0" />
</startup>
<connectionStrings>
<add name="MyContext" connectionString="Data Source=Server;Initial Catalog=DBName;Integrated Security=True;MultipleActiveResultSets=True" providerName="System.Data.SqlClient" />
</connectionStrings>
<entityFramework>
<providers>
<provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
</providers>
</entityFramework>
</configuration>
Mon cours de test:
using System.Data.Entity;
namespace SVMIC.IMS.Entity.IMSClaim
{
public class Context:DbContext
{
static Context()
{
Database.SetInitializer<Context>(null);
}
public Context():base("MyContext")
{
}
}
}
et mon application de test:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using SVMIC.IMS.Entity.IMSClaim;
namespace TestApp
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
Context context = new Context();
}
}
}
Le serveur de base de données est SQL Server 2008 R2.
Je suppose que c'est quelque chose de simple changé en 6.1 et que ça me manque, mais je suis totalement perplexe.
Ok, j'ai résolu le problème.
Dans la frustration de ne pas pouvoir résoudre le problème avec la version 6.1, je n'ai fait aucune différence dans le résultat. Même en construisant et en passant au travers de la source EF, les résultats ont été faibles. Je suis donc revenu à EF 5.0 et ai reconstruit mon code.
EF 5 a immédiatement renvoyé un message d'erreur identifiant un problème dans la définition de schéma, une vue ajoutée par un autre développeur qui référençait des vues système confondait mon modèle, j'ai corrigé le problème et je fonctionnais à nouveau en quelques minutes.
La leçon à retenir est que EF 6 nécessite un travail sérieux en matière de traitement des erreurs, car le simple fait de renvoyer une erreur d’exception générique me laissait pourchasser dans toutes les directions, tandis que le message d’erreur de EF 5 me renvoyait directement au problème.
Si vous travaillez dans un fichier MDF local, mettez à jour le chemin de dossier du fichier MDF dans App.config / Web.config, sinon copiez le fichier dbmx App.cofig connectionStrings et collez-le dans le fichier App.config / Web.config de votre projet.