Question

Je suis en utilisant Entity Framework 4 dans une application de bureau avec SQL Compact. Je veux utiliser un l'installation privée de SQL Compact avec mon application, de sorte que mon programme d'installation peut installer SQL Compact sans donner une seconde installation pour faire l'utilisateur. Il évite aussi les tracas de versioning sur la route.

Ma machine de développement SQL Compact a 3.5 SP1 installé comme une installation publique, donc mon application fonctionne très bien là, comme on peut s'y attendre. Mais il ne tourne pas sur ma machine de test, qui ne dispose pas de SQL Compact installé. Je reçois cette erreur:

The specified store provider cannot be found in the configuration, or is not valid.

Je sais que certaines personnes ont eu des difficultés avec des installations privées SQL Compact, mais je les ai utilisés pendant un certain temps , et je vraiment comme eux. Malheureusement, mon approche régulière de l'installation privée ne fonctionne pas. J'ai vérifié les numéros de version sur mes fichiers CE SQL, et ils sont tous 3.8.8078.0, qui est la version RC SP2.

Voici les fichiers que j'ai inclus dans mon installation privée:

  • sqlcecompact35.dll
  • sqlceer35EN.dll
  • sqlceme35.dll
  • sqlceqp35.dll
  • sqlcese35.dll
  • System.Data.SqlServerCe.dll
  • System.Data.SqlServerCe.Entity.dll

J'ai ajouté une référence à System.Data.SqlServerCe à mon projet, et je l'ai vérifié que tous les fichiers listés ci-dessus sont copiés dans le dossier d'application sur la machine d'installation.

Voici le code que j'utilise pour configurer un EntityConnectionStringBuilder quand j'ouvrir un fichier SQL Compact:

var sqlCompactConnectionString = string.Format("Data Source={0}", filePath);

// Set Builder properties
builder.Metadata = string.Format("res://*/{0}.csdl|res://*/{0}.ssdl|res://*/{0}.msl", edmName);
builder.Provider = "System.Data.SqlServerCe.3.5";
builder.ProviderConnectionString = sqlCompactConnectionString;
var edmConnectionString = builder.ToString();

Suis-je manque un fichier? Est-ce que je manque une Stepp de configuration nécessaire pour dire Entity Framework où trouver mes DLL SQL Compact? Toute autre suggestion pourquoi EF est de ne pas trouver mon SQL DLL Compact sur la machine d'installation? Merci pour votre aide.

Était-ce utile?

La solution

Je me suis dit comment le faire, grâce à une blog par Steve Lasker . En gros, voici ce que vous devez faire:

(1) Définir une référence à System.Data.SqlServerCe.dll dans votre projet. Définissez la propriété CopyLocal sur True.

(2) Dans le App.config pour votre projet, ajoutez le balisage XML suivant. Il dit EntityFramework de chercher à votre installation privée de SQL Compact pour son fournisseur de données:

<system.data>
    <DbProviderFactories>
        <remove invariant="System.Data.SqlServerCe.3.5"/>
        <add name="Microsoft SQL Server Compact Data Provider" invariant="System.Data.SqlServerCe.3.5" description=".NET Framework Data Provider for Microsoft SQL Server Compact" type="System.Data.SqlServerCe.SqlCeProviderFactory, System.Data.SqlServerCe, Version=3.5.1.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91"/>
    </DbProviderFactories>
</system.data>

(3) Dans le projet d'installation, ajoutez les fichiers suivants dans le dossier d'application dans le système de fichiers Editor:

  • sqlcecompact35.dll
  • sqlceme35.dll
  • sqlcese35.dll
  • System.Data.SqlServerCe.Entity.dll

Autres conseils

Pour le compte rendu, avec SQL CE 4 entrées web.config sont les suivantes:

  <system.data>
    <DbProviderFactories>
      <remove invariant="System.Data.SqlServerCe.4.0" />
      <add name="Microsoft SQL Server Compact Data Provider 4.0" invariant="System.Data.SqlServerCe.4.0" description=".NET Framework Data Provider for Microsoft SQL Server Compact" type="System.Data.SqlServerCe.SqlCeProviderFactory, System.Data.SqlServerCe, Version=4.0.0.1, Culture=neutral, PublicKeyToken=89845dcd8080cc91" />
    </DbProviderFactories>
  </system.data>

Version = 4.0.0.1 dans le cas d'un deployement privé et version = 4.0.0.0 dans le cas d'un déploiement général.

Merci pour votre conseil - m'a aidé beaucoup. Il y a un sur le blog SQL Server Compact-Team qui ajoutent des informations supplémentaires pour la version Sql Server Compact 3.5 SP2.

Après avoir lutté pendant un certain temps avec le déploiement privé compact serveur sql j'ai trouvé quelques exigences supplémentaires.

J'ai essayé mon application sur plusieurs systèmes différents et ont reconnu que mon application ne fonctionnait pas correctement sur certains d'entre eux.

Exemple: Essayez ceci:

-J'ai mis en place une installation sp3 winxp propre

-installed le .NET Framework 4.0 étendu

-deployed mon application à la nouvelle installation (y compris tous les dll nécessaires et quelques réglages décrits dans votre / poste de serveur sql blog de l'équipe compacte)

Alors, après quelques recherches, j'ai découvert qu'en plus de l'installation NET Framework 4 je devais installer le framework .net 2 ainsi et il a bien fonctionné.

Alors, voici ma question: quel composant est utilisé par l'édition compacte du serveur SQL qui ne figure pas dans le cadre de .net 4

Je ne veux pas surcharger ma configuration et de la chaîne deux cadres à mon ... bootstrapper Quelqu'un sait-il tout bon conseil?

Un grand merci au serveur sql équipe compacte!

v3.5 SQL Server Compact dépend de « Visual C ++ Runtime 2005 (ou 8,0) » (également connu sous le nom CRT80). Nous emballons les modules CRT80 dans notre MSI. En cas de déploiement privé,

vous devez prendre soin de cette dépendance. Les choses fonctionnent avec v2.0 .NET FX sur le système automatiquement parce que .NET v2.0 FX packages et installe également des modules CRT80.

Merci

est ce qui a fonctionné pour moi:

Vous avez un fichier machine.config pour les versions 2.0 et 4.0 dotNet:

2,0 dotNET     

C:\Windows\Microsoft.NET\Framework\v2.0.50727\CONFIG\machine.config
dotNet 4.0     
C:\Windows\Microsoft.NET\Framework\v4.0.30319\Config\machine.config

Si vous ouvrez le fichier pour la version 2.0, vous verrez qu'il a un noeud, qui ressemble probablement quelque chose comme ceci:

<system.data>
    <DbProviderFactories>
        <add name="Odbc Data Provider" ... stuff here ... />
        <add name="OracleClient Data Provider" ... stuff here ...>
        ... more lines similar to the one above ...
        <add name="Microsoft SQL Server Compact Data Provider" Invariant="System.Data.SqlServerCe.3.5" ...>
    </DbProviderFactories>
</system.data>

Alors, si vous ouvrez l'un pour dotNet 4.0, il semble un peu plus misérablement comme:

<system.data>
    <DbProviderFactories>        
    </DbProviderFactories>
</system.data>

Ou peut-être ne même pas un noeud du tout !!! Dans les deux cas, il suffit de copier le noeud dans son intégralité à partir du fichier machine.config pour v2 à celui pour v4.

SIDE NOTE

Si vous éprouvez des difficultés à enregistrer votre édition de la machine.config v4, alors vous pourriez avoir à faire un clic droit deux ou trois fois en cliquant sur l'icône de lancement de l'éditeur afin de se rendre à la course en mode admin.

Être coincé avec le même problème,

« le fournisseur de magasin spécifié ne peut pas être trouvée dans la configuration ou non valide. »

Je suis venu dans ce poste. J'ai essayé presque tout. J'avais installé " System.Data.SqlServerCe " avec nugets.

Alors j'avais déjà en dessous de la ligne de code ajouté dans mon web.config

<DbProviderFactories>
  <remove invariant="System.Data.SqlServerCe.4.0" />
  <add name="Microsoft SQL Server Compact Data Provider 4.0" invariant="System.Data.SqlServerCe.4.0" description=".NET Framework Data Provider for Microsoft SQL Server Compact" type="System.Data.SqlServerCe.SqlCeProviderFactory, System.Data.SqlServerCe" />
  <!--<add name="MySQL Data Provider" invariant="MySql.Data.MySqlClient" description=".Net Framework Data Provider for MySQL" type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data, Culture=neutral, PublicKeyToken=c5687fc88969c44d" />-->
  <!--<add name="Microsoft EntityClient" invariant="System.Data.EntityClient.4.0" description=".NET Framework Data Provider for Microsoft SQL Server Compact" type="System.Data.SqlServerCe.EntityClient, System.Data.EntityClient, Version=4.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" />-->
</DbProviderFactories>

Encore l'erreur continue ..

Je me suis débarrassé de problème décommenter les deux dernières lignes de commentaires dans le code ci-dessus ... il devient maintenant

<DbProviderFactories>
  <remove invariant="System.Data.SqlServerCe.4.0" />
  <add name="Microsoft SQL Server Compact Data Provider 4.0" invariant="System.Data.SqlServerCe.4.0" description=".NET Framework Data Provider for Microsoft SQL Server Compact" type="System.Data.SqlServerCe.SqlCeProviderFactory, System.Data.SqlServerCe" />
  <add name="MySQL Data Provider" invariant="MySql.Data.MySqlClient" description=".Net Framework Data Provider for MySQL" type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data, Culture=neutral, PublicKeyToken=c5687fc88969c44d" />
  <add name="Microsoft EntityClient" invariant="System.Data.EntityClient.4.0" description=".NET Framework Data Provider for Microsoft SQL Server Compact" type="System.Data.SqlServerCe.EntityClient, System.Data.EntityClient, Version=4.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" />
</DbProviderFactories>

it helps .. Merci.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top