2012-10-12 177 views
10

He estado probando un primer proyecto de código EF con SQl Compact 4.0. Cuando intento ejecutar el proyecto, aparece un error que dice "CREATE DATABASE permission denied in database 'master'.".Entity Framework que se conecta a SQLEXPRESS no SQL Compact

Busqué ayuda y en respuesta a algunos blogs intenté identificar la cadena de conexión que se utilizaba. Para mi sorpresa fue

context.Database.Connection.ConnectionString "Data Source=.\\SQLEXPRESS;Initial Catalog=Ancestors.Models.AncestorsContext;Integrated Security=True;MultipleActiveResultSets=True;Application Name=EntityFrameworkMUE" string 

pesar de que mi archivo web.config incluye las siguientes secciones ...

<connectionStrings> 
    <add name="DefaultConnection" providerName="System.Data.SqlServerCe.4.0" connectionString="Data Source=|DataDirectory|\aspnet-Ancestors-20121012114712.sdf" /> 
</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.1, Culture=neutral, PublicKeyToken=89845dcd8080cc91" /> 
</DbProviderFactories> 
</system.data> 

Alguien alguna idea de por qué EF está insistiendo en la creación de una conexión con SQLExpress en lugar de SQL ¿Compacto? No puedo encontrar ninguna referencia a SQLEXPRESS en ninguna parte de la solución.

Respuesta

2

Busca la sección <entityFramework> en su web.config, debe tener su fábrica de conexiones por defecto existe:

<entityFramework> 
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework"> 
     <parameters> 
     <parameter value="Data Source=.\SQLEXPRESS; Integrated Security=True; MultipleActiveResultSets=True"/> 
     </parameters> 
    </defaultConnectionFactory> 
    </entityFramework> 

Si estás haciendo un primer proyecto de código, también puede alterar su constructor por defecto a utilizar la otra cadena de conexión:

colocar ofertas
public YourContext() : base("name=DefaultConnection") 
{ 

} 
+0

La sección es la siguiente ...

+0

trate de añadir un valor a su defaultConnectionFactory con su cadena de conexión, o altere su constructor predeterminado para que se dirija a su otra cadena de conexión –

1
+0

¡Gracias por publicar su respuesta! Tenga en cuenta que debe publicar las partes esenciales de la respuesta aquí, en este sitio, o su publicación corre el riesgo de borrarse [Consulte las preguntas frecuentes donde se mencionan las respuestas que son 'apenas más que un enlace'.] (Http: // stackoverflow. com/faq # deletion) Puede incluir el enlace si lo desea, pero solo como "referencia". La respuesta debería ser independiente sin necesidad del enlace. – Taryn

3

lugar de utilizar el siguiente para pasar su nombre de la conexión a la DBContext

public YourContext() : base("DefaultConnection") 
{ 

} 

Utilice la directiva nombre

public YourContext() : base("name=DefaultConnection") 
{ 

} 

Esto le indicará a EF para usar el parámetro como una conexión.

También agregando el "claro" en la parte superior de su conexión. Las secciones de cadenas en web.config pueden resolver problemas de herencia.

+0

Para EF6, si agrega 'nombre' al contexto, obtiene un error' "No se encontró la conexión con ese nombre" ' – user3402754

Cuestiones relacionadas