2010-12-03 15 views
7

Estoy jugando con SQL Server Compact Edition 4 CTP1 ya que me gustaría usarlo como almacén de datos para una aplicación web de poco tráfico. Cuando trato de crear un DataContext con una cadena de conexión que especifica System.Data.SqlServerCe.4.0 (con el fin de utilizar LINQ to SQL), me sale el siguiente mensaje de error:¿Por qué mi DataContext no usará SQL Server Compact Edition 4, en lugar de tratar de usar 3.5?

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

¿Por qué es mi código no utilizando la versión 4 de SQL CE?

Back story: Estoy usando Visual Web Developer Express 2010 para desarrollo, pero descargué la versión beta de WebMatrix y usé su diseñador para crear un archivo SQL CE 4 .sdf que contiene algunos datos de prueba.

Usando las clases SqlCeConnection/SqlCeCommand/SqlCeDataReader, he creado con éxito una aplicación MVC básica que recupera los datos de prueba y los muestra. Los archivos binarios de SQL CE 4 se copian en la carpeta bin de la aplicación. En mi controlador:

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 cadena de conexión en Web.config es el siguiente:

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

Esto funciona perfectamente, así que sé la cadena de conexión es correcta y que he creado los binarios adecuadamente, etc Así que pensé en probar un poco de LINQ To SQL cosas, que es como yo quiero construir la aplicación real:

[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; } 
    } 
} 

un d después en el controlador (db siendo un Repository construido en el constructor del controlador):

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

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

Pero cuando veo la página de utilizar este código, me sale el error antes mencionado:

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

¿Cómo puedo ¿obligar a mi aplicación a usar la versión correcta? ¿Alguien puede ayudar?

+0

También estoy tratando de hacer lo mismo, pero el resultado es un poco diferente, el mensaje de error es que ASP.NET no admite SQLCE. Aunque, estoy usando SQLCE 4.0 RTM. Si tiene éxito, pl. Házmelo saber. –

Respuesta

7

LINQ to SQL no es compatible con SQL Server Compact 4.0, solo Entity Framework/LINQ to Entities. ¡Pero si pasa una versión 4 SqlCeConnection al constructor DataContext, en realidad funcionará!

+0

Ok, gracias - [su artículo] (http://erikej.blogspot.com/2010/11/using-entity-framework-with-sql-server.html) fue muy útil también. ¿Tengo razón al pensar que LINQ to SQL fue compatible con SQL CE 3.5? Y si es así, ¿por qué eliminaron el soporte? –

+0

Gracias! Sí, LINQ to SQL fue compatible con SQL CE 3.5. Prioridades y soporte para nuevas funciones solo disponibles en EF (primer modelo/puño de código) y mejor soporte para EF con ASP.NET, OData, datos dinámicos, etc. – ErikEJ

+2

Y aquí está el enlace de soporte que dice que SQL CE 4 no funciona con Linq a SQL: http://blogs.msdn.com/b/sqlservercompact/archive/2011/01/12/microsoft-sql-server-compact-4-0-is-available-for-download.aspx – mattmc3

Cuestiones relacionadas