7

Je joue avec SQL Server Compact Edition 4 CTP1 comme je voudrais l'utiliser comme magasin de données pour une application web à faible trafic. Lorsque je tente de créer un DataContext avec une chaîne de connexion spécifiant System.Data.SqlServerCe.4.0 (pour utiliser LINQ to SQL), je reçois le message d'erreur suivant:Pourquoi mon DataContext n'utilise-t-il pas SQL Server Compact Edition 4, plutôt que d'essayer d'utiliser 3.5?

Cannot open '|DataDirectory|\data.sdf'. Provider 'System.Data.SqlServerCe.3.5' not installed. 

Alors, pourquoi est mon code n'utilise la version 4 de SQL CE? Retour dossier: J'utilise Visual Web Developer Express 2010 pour le développement, mais j'ai téléchargé la version bêta de WebMatrix et utilisé son concepteur pour créer un fichier SQL CE 4 .sdf contenant des données de test. En utilisant les classes SqlCeConnection/SqlCeCommand/SqlCeDataReader, j'ai réussi à créer une application MVC de base qui récupère les données de test et les affiche. Les fichiers binaires SQL CE 4 sont copiés dans le dossier bin de l'application. Dans mon contrôleur:

var connectionString = ConfigurationManager.ConnectionStrings["Main"].ConnectionString; 
var tmp = new Dictionary<string, string>(); 

using(var conn = new SqlCeConnection(connectionString)) 
{ 
    conn.Open(); 

    using (SqlCeDataReader r = new SqlCeCommand("select * from ttest", conn).ExecuteReader()) 
    { 
     while (r.Read()) 
     { 
      tmp.Add(r["id"].ToString(), r["name"].ToString()); 
     } 
    } 
} 

return View(new TestViewModel { 
    Items = tmp 
}); 

La chaîne de connexion dans Web.config est comme suit:

<add name="Main" connectionString="Data Source=|DataDirectory|\data.sdf" providerName="System.Data.SqlServerCe.4.0" /> 

Cela fonctionne parfaitement, donc je sais la chaîne de connexion est correcte et que je l'ai mis en place les binaires correctement, etc. donc, je pensais que je vais essayer un peu de LINQ pour farcir SQL, ce qui est la façon dont je veux construire la véritable application:

[Table(Name = "tTest")] 
public class TestEntity 
{ 
    [Column(IsPrimaryKey = true, IsDbGenerated = true)] 
    public int ID { get; set; } 
    [Column] 
    public string Name { get; set; } 
} 

public class Repository 
{ 
    private Table<TestEntity> testTable; 

    public Repository() 
    { 
     var connectionString = ConfigurationManager.ConnectionStrings["Main"].ConnectionString; 
     var context = new DataContext(connectionString); 
     testTable = context.GetTable<TestEntity>(); 
    } 

    public IQueryable<TestEntity> TestEntities 
    { 
     get { return testTable; } 
    } 
} 

une d, puis dans le contrôleur (db étant un Repository construit dans le constructeur du contrôleur):

var tmp = db.TestEntities.ToDictionary(x => x.ID.ToString(), x => x.Name); 

return View(new TestViewModel { 
    Items = tmp 
}); 

Mais quand je visionne la page en utilisant ce code, je reçois l'erreur ci-dessus:

Cannot open '|DataDirectory|\data.sdf'. Provider 'System.Data.SqlServerCe.3.5' not installed. 

Comment puis-je forcer mon application à utiliser la bonne version? Quelqu'un peut-il aider?

+0

J'essaie également de faire la même chose, mais le résultat est un peu différent, le message d'erreur est que ASP.NET ne supporte pas SQLCE. Cependant, j'utilise SQLCE 4.0 RTM. Si vous réussissez pl. faites le moi savoir. –

Répondre

7

LINQ to SQL n'est pas pris en charge par SQL Server Compact 4.0, uniquement Entity Framework/LINQ to Entities. Mais si vous passez une version 4 SqlCeConnection au constructeur DataContext, cela fonctionnera réellement!

+0

Ok, merci - [votre article] (http://erikej.blogspot.com/2010/11/using-entity-framework-with-sql-server.html) était très utile aussi. Ai-je raison de penser que LINQ to SQL était supporté par SQL CE 3.5? Et si oui, pourquoi ont-ils supprimé le support? –

+0

Merci! Oui, LINQ to SQL était supporté par SQL CE 3.5. Priorité et support pour les nouvelles fonctionnalités disponibles uniquement dans EF (modèle first/code fist), et meilleur support pour EF avec ASP.NET, OData, Dynamic Data etc. – ErikEJ

+2

Et voici le lien de support indiquant que SQL CE 4 ne fonctionne pas avec Linq SQL: http://blogs.msdn.com/b/sqlservercompact/archive/2011/01/12/microsoft-sql-server-compact-4-0-is-available-for-download.aspx – mattmc3

Questions connexes