Domanda

Sto utilizzando Entity Framework 4 in un'applicazione desktop con SQL Compact.Voglio usare un privato di installazione di SQL Compact con la mia applicazione, in modo che il mio programma di installazione può installare SQL Compact senza dare all'utente una seconda installazione da fare.Inoltre, evita il controllo delle versioni problemi lungo la strada.

La mia macchina di sviluppo di SQL Compact 3.5 SP1 installato come un pubblico di installazione, quindi la mia app funziona bene c'è, come ci si aspetterebbe.Ma non è in esecuzione sulla mia macchina di prova, che non dispone di SQL Compact installato.Ricevo questo errore:

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

So che alcune persone hanno avuto difficoltà con SQL Compact impianti privati, ma Le ho usate per un po, e mi piace molto di loro.Purtroppo, il mio regolari privato metodo di installazione non funziona.Ho controllato i numeri di versione sul mio SQL CE file, e sono tutti 3.8.8078.0, che è il SP2 versione RC.

Qui sono i file che ho inserito nella mia installazione:

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

Ho aggiunto un riferimento a System.Dati.SqlServerCe per il mio progetto, e ho verificato che tutti i file sopra elencati vengono copiati nella cartella di installazione della macchina.

Ecco il codice che ho utilizzato per configurare un EntityConnectionStringBuilder quando ho aperto un SQL Compact file:

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();

Mi manca un file?Mi manca una configurazione passo per dire Entity Framework dove trovare my SQL Compact Dll?Altri suggerimenti perché EF non è trovare il mio SQL Compact Dll nel computer di installazione?Grazie per il vostro aiuto.

È stato utile?

Soluzione

ho capito come si fa, grazie ad un post sul blog di Steve Lasker . In sostanza, ecco cosa devi fare:

(1) Impostare un riferimento alla System.Data.SqlServerCe.dll nel progetto. Impostare la proprietà CopyLocal su True.

(2) Nella App.config per il progetto, aggiungere il seguente tag XML. Racconta EntityFramework di guardare alla propria installazione privata di SQL Compact per il suo fornitore di dati:

<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) Nel progetto di installazione, aggiungere i seguenti file alla cartella dell'applicazione nel file system Editor:

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

Altri suggerimenti

Per la cronaca, con SQL CE 4 le voci web.config sono i seguenti:

  <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 in caso di deployement privata e versione = 4.0.0.0 in caso di una distribuzione generale.

grazie per il tuo suggerimento, mi hanno aiutato un sacco.C'è un post di SQL Server Compact-il blog del Team di che aggiungere alcune informazioni aggiuntive per Sql Server Compact 3.5 SP2.

Dopo aver lottato per un po ' con la distribuzione privata di sql server compact ho scoperto alcuni requisiti aggiuntivi.

Ho provato la mia app su diversi sistemi e riconosciuto che la mia app non funziona correttamente su alcuni di essi.

Esempio:Prova questo:

-Ho impostato una pulita winxp sp3 installazione

-installato .net Framework 4.0 estesa

-distribuire la mia applicazione della nuova installazione (comprese tutte le dll e modifiche descritte in/sql server compact team del post del blog)

Così, dopo qualche ricerca ho scoperto che, oltre alla .net framework 4 installazione ho dovuto installare il .net framework 2 e ha funzionato bene.

Ecco la mia domanda:il componente che viene utilizzato da sql server compact edition, che non è contenuta nel .net framework 4?

Non voglio sovraccaricare la mia configurazione e la catena di due quadri per il mio programma di avvio automatico...Qualcuno sa qualche buon Suggerimento?

Molte grazie a sql server compact Team!

SQL Server Compact v3.5 dipende dai ‘Runtime di Visual C++ 2005 (8.0)’ (conosciuto anche come CRT80).Ci pacchetto CRT80 moduli nel nostro MSI.In caso di distribuzione privata,

hai bisogno di prendersi cura di questo tipo di dipendenza.Cose con cui lavorare .NET FX v2.0 nel sistema automaticamente perché .NET FX v2.0 anche pacchetti e installa CRT80 moduli.

Grazie

Questo è ciò che ha funzionato per me:

Hai un file machine.config per le versioni 2.0 e 4.0 dotNet:

dotNET 2.0     

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

Se si apre il file per la versione 2.0, si vede che ha un nodo , che probabilmente simile a questa:

<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>

considerando che, se si apre quella per dotNet 4.0, sembra un po 'più miseramente come:

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

O forse non ha nemmeno un nodo a tutti !!! In entrambi i casi, è sufficiente copiare il nodo nella sua interezza dal file machine.config per v2 a quella per v4.

SIDE NOTA

Se si hanno difficoltà a salvare la modifica del machine.config v4, allora potrebbe essere necessario fare clic destro un paio di volte quando si fa clic sull'icona di lancio editor di modo da ottenere alla corsa in modalità amministratore.

Di essere bloccato con lo stesso problema,

"specificato provider di archivio non può essere trovato nella configurazione o non è valido."

Mi è venuto questo post.Ho provato quasi tutto.Avevo installato "Sistema.Dati.SqlServerCe"utilizzo di nugets.

Così ho già avuto al di sotto della linea di codice aggiunto nel mio 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>

Comunque l'errore continua..

Mi sono liberato del problema togliendo le ultime due righe di commento nel codice di cui sopra...quindi ora diventa

<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>

Speranza che aiuta..Grazie.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top