2011-01-22 13 views
5

Sto provando a utilizzare il codice EF prima con la mia applicazione WPF, l'idea è di creare un Dq SqlCe in AppData/MyApp (se non ce n'è uno) e utilizzarlo con EF Codice prima.Uso del codice EF prima e SQL in WPF

Al momento sta dando errore quando provo a leggere i dati dal database che si suppone di creare, ma quando ho controllato l'oggetto contesto db ho visto che sta cercando di crearlo in SqlExpress.

Prima di tutto, come posso impostarlo per funzionare con CE invece di SqlExpress e impostare il percorso del file?

Ho provato a cambiare la stringa di connessione in app.config ma non sono riuscito a farlo funzionare (non ha creato il file sdf) e inoltre non sono sicuro di come impostare il percorso della stringa di connessione alla cartella AppData come in Cartella utente (non riparata).

Mai lavorato con codice SqlCe o EF Prima d'ora, quindi ogni aiuto è gradito & apprezzato.

Grazie in anticipo.

risposta

6

Sono riuscito a farlo funzionare dopo un sacco di casino. Il mio app.config ha la seguente:

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <configSections> 
    </configSections> 

    <connectionStrings> 
    <add name="Database" 
     connectionString="Data Source=Database.sdf" 
     providerName="System.Data.SqlServerCe.4.0" /> 
    </connectionStrings> 

    <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.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91"/> 
    </DbProviderFactories> 
    </system.data> 

</configuration> 

Avendo la DbProviderFactory in là vi aiuterà quando si tratta di distribuzione troppo. Permetterà agli utenti di utilizzare SQLCE 4 senza eseguire il programma di installazione (a patto che forniate anche i binari nativi, alcune informazioni qui: http://erikej.blogspot.com/2011/02/using-sql-server-compact-40-with.html).

+0

Ho smesso di inseguirlo un po 'di tempo fa, quindi non ho testato la tua soluzione ma dal momento che nessun altro ha inventato nulla e hai già 2 voti, lo accetterò. Grazie amico, noterò la soluzione da qualche parte e probabilmente la userò in futuro! – Tiax

+0

Per codice Prima, dopo aver impostato il tuo programma in modo che funzioni sul tuo sistema di sviluppo, tutto ciò che è veramente necessario per app.config è aggiungere le voci di tag 'DbProviderFactories'. Code First esegue tutte le stringhe di connessione necessarie per te. Potrebbe anche essere necessario assicurarsi che le DLL SQLCE (dalla cartella Programmi [x86]) siano distribuite insieme al programma. –

0

Ecco un possibile indizio. Se si installa EFCodeFirst.SqlServerCompact utilizzando Gestione pacchetti NuGet e si guarda in: Visual Studio 2010 \ Projects \ MyProject \ packages \ EFCodeFirst.SqlServerCompact.0.8.8482 \ Content, fa le cose per la propria app Web come:

public static class AppStart_SQLCEEntityFramework { 
    public static void Start() { 
     DbDatabase.DefaultConnectionFactory = new SqlCeConnectionFactory("System.Data.SqlServerCe.4.0"); 

     // Sets the default database initialization code for working with Sql Server Compact databases 
     // Uncomment this line and replace CONTEXT_NAME with the name of your DbContext if you are 
     // using your DbContext to create and manage your database 
     //DbDatabase.SetInitializer(new CreateCeDatabaseIfNotExists<CONTEXT_NAME>()); 
    } 
} 
0

Non penso che gli strumenti siano pronti per SQLCE per progetti WPF. Mi ha fermato anche nelle mie tracce.

0

Questo probabilmente non aiuterà nel breve periodo, ma penso che sarebbe la soluzione migliore a lungo termine. Non sono stato in grado di trovare dove qualcun altro ha documentato come farlo, quindi suppongo che dovrò capirlo mentre vado, a meno che qualcuno con una conoscenza più profonda dell'uso di SqlCE4, CodeFirst e della creazione di pacchetti NuGet mi battesse esso. Quello di cui abbiamo bisogno è un pacchetto NuGet, sia un nuovo pacchetto che uno intelligente abbastanza per gestirlo, che può aggiungere SqlCE4 e CodeFirst a un progetto WPF e/o WinForms.

Il pacchetto esistente sembra orientato verso progetti Web poiché dipende da WebActivator. Da quello che posso dire, l'installazione di WebActivator su un progetto non web non è appropriata. Non so se è possibile che un pacchetto NuGet rilevi il tipo di progetto ed esegua diverse logiche di installazione basate su tali informazioni. Sarebbe meglio ovunque per chi è responsabile della manutenzione del pacchetto EFCodeFirst.SqlServerCompact per rilasciare una versione non web o renderla più intelligente.

In attesa che, nel mio tempo libero, vedrò se riesco a capire come si fa e creare il mio. Non posso promettere quanto mi ci vorrà perché sono quasi completamente all'oscuro per quanto riguarda la creazione di pacchetti NuGet. Ne ho creati un paio davvero di base ma non ho mai fatto cose avanzate come le trasformazioni di configurazione e simili.

+0

WebActivator dalla versione 1.3 supporta scenari "non Web". È possibile eseguire le azioni manualmente (utile nei test unitari). –