27 votes

Entity Framework 4 et SQL Compact 4 : Comment générer une base de données ?

Je développe une application avec Entity Framework 4 et SQL Compact 4, en utilisant une approche Model First. J'ai créé ma GED, et maintenant je veux générer une base de données SQL Compact 4.0 qui servira de magasin de données pour le modèle. Je fais apparaître le Assistant de génération de base de données et cliquez sur le Nouvelle connexion pour créer une connexion pour le fichier généré. Le site Choisir la source de données apparaît, mais SQL Compact 4.0 ne figure pas dans la liste des sources de données disponibles :

enter image description here

J'utilise VS 2010 SP1 (beta) et j'ai installé les outils VS 2010 pour SQL Compact 4.0. Je peux créer une connexion de données SQL Compact 4.0 à partir de l'explorateur de serveur. C'est seulement dans le Assistant de génération de base de données que l'option 4.0 n'apparaît pas. BTW, mon installation de SQL Compact 4.0 comprend bien System.Data.SqlServerCe.Entity.dll . Je devrais donc avoir les composants SQL Compact dont j'ai besoin.

Est-ce que je fais quelque chose d'incorrect ou est-ce que c'est un bug ? Quelqu'un a-t-il un correctif ou une solution de contournement ? Merci de votre aide.

34voto

David Veeneman Points 7628

Pour contourner le problème, j'utilise la fonction Assistant de génération de base de données pour générer un script SQL Compact 3.5, que j'exécute contre une base de données SQL Compact 4.0 vierge créée dans l'explorateur de solutions VS 2010. Voici les étapes à suivre pour accomplir cette tâche :

Étape 1 : Exécuter le Assistant de génération de base de données . Il demande la création d'un fichier sur sa première page, alors demandez-lui de créer un fichier SQL Compact 3.5. Ce fichier est un fichier factice, donc le nom que vous lui donnez n'a pas d'importance.

Étape 2 : Complétez l'assistant pour créer le DDL script qui configurera la nouvelle base de données.

Étape 3 : Supprimez le fichier fictif créé à l'étape 1.

Étape 4 : Utilisez l'explorateur de serveur de VS 2010 pour créer le fichier SQL Compact 4.0 que vous utiliserez dans votre projet.

Étape 5 : Le site Assistant de génération de base de données place deux références à SQL Compact "3.5" dans le fichier EDMX ; ces références doivent être changées en "4.0". Ouvrez le fichier EDMX dans l'éditeur XML de VS 2010 (cliquez avec le bouton droit de la souris et sélectionnez "Ouvrir avec" pour accéder à l'éditeur XML). La ligne 7 devrait contenir les références "3.5". Changez-les en "4.0" et enregistrez le fichier.

Étape 6 : Ouvrez le fichier EDMX.SQLCE script généré dans VS 2010. VS indiquera (via une bannière en bas du volet de travail) que le script est déconnecté. Faites un clic droit sur l'espace blanc au-dessus de la bannière et sélectionnez Connexion > Connecter dans le menu contextuel qui apparaît. Cela fait apparaître un dialogue de connexion - utilisez-le pour connecter le script à la base de données SQL Compact 4.0 que vous avez créée à l'étape 4.

Étape 7 : Cliquez à nouveau avec le bouton droit de la souris dans l'espace blanc de script et sélectionnez Exécuter SQL dans le menu contextuel. Le script s'exécutera et vous obtiendrez le message de résultats habituel dans un volet situé sous le script. En supposant une exécution réussie, la base de données est alors configurée pour correspondre au modèle de données d'entité.

Étape 8 : Nous devons également nous assurer que le fichier App.config/web.config ne pointe pas vers le fichier factice. Si c'est le cas, changez-le pour le fichier CE 4.0 réel créé à l'étape 4 ci-dessus. Sinon, nous avons des problèmes avec la régénération du script lorsque nous apportons des modifications au modèle. Dans le fichier de configuration, changez également 3.5 en 4.0.

À ce stade, vous devriez être en mesure d'utiliser Entity Framework 4 pour travailler avec votre base de données.

2voto

Dimentox Points 189

Pour répondre aux commentaires ci-dessous et les adresser selon : http://blogs.msdn.com/b/sqlservercompact/archive/2011/01/12/microsoft-sql-server-compact-4-0-is-available-for-download.aspx

Ces magiciens ne fonctionnent pas.

Les concepteurs des projets Windows VB ou C# dans Visual Studio 2010 SP1 Beta : Les assistants suivants ne fonctionnent pas avec Compact 4.0 dans le système de projet Windows. Les développeurs peuvent ajouter manuellement une référence au fournisseur ADO.NET pour Compact 4.0 (System.Data.SqlServerCe) pour développer des programmes pour Compact 4.0 dans les projets Windows :

  1. L'assistant de configuration des sources de données qui est utilisé pour configurer les ensembles de données.
  2. L'assistant de configuration des données qui est utilisé pour configurer la synchronisation des données et des schémas avec SQL Server en utilisant Sync FX.
  3. L'assistant de modèle de données d'entités qui est utilisé pour générer des entités à partir d'une base de données Compact.

Voici les solutions de contournement acceptées pour ces problèmes. http://erikej.blogspot.com/2010/11/using-entity-framework-with-sql-server.html

1voto

Ladislav Mrnka Points 218632

Si je comprends bien, la version actuelle de VS 2010 ne prend pas en charge SQL CE 4.0. Il devrait être inclus dans VS 2010 SP1 (actuellement en version bêta). Consultez cet article de blog qui décrit également l'utilisation de EF Model avec SQL CE 4.0 dans SP1.

Editar:

J'ai trouvé ceci solution de contournement .

1voto

Roland Points 606

Vous pouvez utiliser IDatabaseInitializer et créer la base de données dans le code en utilisant

if (File.Exists("Test.sdf"))
    File.Delete("Test.sdf");

string connStr = "Data Source = Test.sdf; Password = <password>";

SqlCeEngine engine = new SqlCeEngine(connStr);
engine.CreateDatabase();
engine.Dispose();

SqlCeConnection conn = null;

try {
    conn = new SqlCeConnection(connStr);
    conn.Open();

    SqlCeCommand cmd = conn.CreateCommand();
    cmd.CommandText = "CREATE TABLE myTable (col1 int, col2 ntext)";
    cmd.ExecuteNonQuery();

catch {
finally {
    conn.Close();

http://msdn.microsoft.com/en-us/library/system.data.sqlserverce.sqlceengine(v=vs.80).aspx

0voto

takepara Points 5965

Une autre encore, utiliser l'outil de base de données WebMatrix.

Microsoft WebMatrix

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X