2012-06-16 34 views
6

Tengo una primera aplicación web de código EF que funciona bien y se conecta correctamente al servidor de la base de datos. He agregado una aplicación de consola a la solución para probar la lógica de un servicio que acompañará a la aplicación.Aplicación Entity Framework Console que se conecta a la base de datos incorrecta

Estaba teniendo un rasguño en la cabeza por qué la aplicación de consola no estaba guardando los datos, así que reduje a una simple búsqueda de la base de datos y resulta que la aplicación de la consola original guardaba el registro, pero a una base de datos diferente de lo que se especifica en la cadena de conexión.

Aquí es la cadena de conexión de la app.config:

<add name="DatabaseContext" connectionString="Data Source=xxx.xx.x.xx; Initial Catalog=OKWU_Gateway; User ID=xxxxx; Password=********; Trusted_Connection=False;" providerName="System.Data.SqlClient" /> 
    <add name="DevelopmentEntities" connectionString="metadata=res://*/EntityModel.csdl|res://*/EntityModel.ssdl|res://*/EntityModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;Data Source=;Data Source=|DataDirectory|\OKWU_Gateway.mdf" providerName="System.Data.EntityClient" /> 

El DatabaseContext es

La aplicación de consola es muy simple

Database.SetInitializer<DatabaseContext>(null); 
    static void Main(string[] args) 
    { 
     using (DatabaseContext db = new DatabaseContext()) 
     { 
      var query = from u in db.Users where u.Id == 1 select u; 
      foreach (User u in query) 
      { 
       Console.WriteLine(u.Id + " " + u.FirstName + " " + u.LastName); 
      } 
      Console.ReadLine(); 
     } 
    } 

pero en lugar de conectarse a la base de datos de el servidor remoto que está conectando a sqlexpress en la máquina de desarrollo y accediendo a esta base de datos.

UniversityGateway.Data.DatabaseContext 

He intentado cambiar la cadena de conexión para señalar el | DataDirectory | a la cadena de conexión SQL y eso no hizo ninguna diferencia. Las cadenas de conexión son las mismas que en el archivo web.config y, como dije, la aplicación web funciona bien.

¿Alguna idea sobre lo que me estoy perdiendo o apuntarme en la dirección correcta para resolver esto?

+0

simplemente comprobando ... usted no tiene ningún archivo de recursos extraviados dando vueltas, ¿verdad? –

+1

por qué en el mundo alguien rechazaría esto y no se molestaría en dejar un comentario. – Brian

+1

¿Cómo es el constructor de su contexto? –

Respuesta

0

Bien después de muchas excavaciones encontré una solución. No estoy seguro de si es el correcto/mejor, pero funciona así que puedo seguir adelante.

Dado que la aplicación de consola no estaba respetando la cadena de conexión en el app.config, que especifica la conexión en el código con

db.Database.Connection.ConnectionString 

Todavía siento que me falta algo aquí, sin embargo.

Descubrí que una parte adicional de mi problema es que EF Codefirst no funciona bien con los tipos de datos Sql Server 2005 DateTime.

+1

Existe una buena posibilidad de que el problema esté relacionado con el constructor de tu clase DbContext, así que por favor sigue el comentario de @Ladislav y pégalo en tu pregunta. – kingdango

+0

en realidad se debe a que los tipos de datos ef datetime no se sincronizan con el tipo de datos de fecha y hora de sql 2005. Si hubiéramos generado un archivo emdx a partir de una base de datos existente, podríamos agregar la configuración del token providermanifest para permitir que funcione bien con 2005, pero usar código primero no era una opción. Reparar eso en la re-escritura. – Brian

Cuestiones relacionadas