He usado EF 4.1 (Code First) hace un tiempo en un proyecto MVC 3, y estuvo bien.Entity Framework 4.3.1 falla al crear (/ abrir) una base de datos [Anomalía de subprocesos?]
Hoy he intentado usar EF 4.3.1 (Código Primera) en un proyecto de Windows Forms y se encontró con algunos vudú real: (El proyecto original que estaba trabajando era WinForms, sin embargo lo mismo es cierto para el unidos Código de aplicación de consola.)
Al intentar introducir una clase simple en la base de datos, recibo la siguiente excepción: No se puede abrir la base de datos "Test" solicitada por el inicio de sesión. El inicio de sesión falló. Falló el inicio de sesión para el usuario '[ComputerName] \ [Administrator]'.
He intentado verificar las configuraciones de SQL Server (2008 R2) pero mi usuario tiene tiene todos los permisos en el servidor.
NOTA: La base de datos hace no existen la primera vez que ejecute la aplicación.
Incluso el siguiente ejemplo de código no funciona:
class Program
{
public static void Main()
{
var person = new Person { Name = "Nathan" };
using (var db = new MyContext())
{ //#1
db.Persons.Add(person);
db.SaveChanges();
}
Console.Write("Person saved !");
Console.ReadLine();
}
}
public class Person
{
public int PersonId { get; set; }
public string Name { get; set; }
}
public class MyContext : DbContext
{
public DbSet<Person> Persons { get; set; }
public MyContext()
: base("Data Source=localhost;Database=Test;Integrated Security=True;")
{ }
}
He intentado volver a instalar EF 4.3.1 - en vano. Reiniciar el servidor SQL tampoco tuvo ningún efecto.
NOTA: Me he dado cuenta de un buen montón de preguntas similares en todo, pero ninguno es tanto la misma que la mía y respondí - aquí está la esperanza de que me tenga suerte aquí :)
Para aclarar: El usuario al que se le niega el acceso es el propietario (administrador local) de la máquina.
EDIT: He estado corriendo un par de experimentos y he encontrado algo muy extraño:
Si hago una pausa el programa en la línea marcada "# 1" y comprobar el valor de db. Database.Exists() a través de la ventana dereloj, me dice: "la evaluación de la función requiere que todos los hilos para funcionar" con esa pequeña Ondulado botón me puede hacer clic para que funcione en todos los temas.
Si hago clic en ese botón de la función se evalúa como Falso .
ahora que puedo hacer cosas:
- continuar la ejecución: En este caso me sale exactamente la misma excepción.
- Ejecute db.Database.Create() desde la ventana Watch: en este caso, el programa se ejecuta satisfactoriamente hasta el final y veo la base de datos, la tabla y la fila creadas en mi SQL Management Studio.
Parece una solución simple, ¿no? ¡Incorrecto!
He intentado prefijar el acceso a los datos con una llamada al db.Database.CreateIfNotExists(); pero luego obtengo el exactamente la misma excepción en esa línea.
db.Database.Initialize (true); no tiene ningún efecto, ya sea ...
NOTA: Si utilizando el método anterior se crea la base de datos, puedo utilizarlo correctamente partir de ese momento, así que eso es al menos la mitad de un consuelo: P El problema es, por supuesto, lo que sucede cuando agrego un DropCreateIfModelChanges o DropCreateAlways Initalizer (ya que estoy en el medio del desarrollo activo del modelo).
Gracias.
[Estoy sospechando que es más bien un problema de Entity Framework de SQL Server.]
¿Puede conectarse a la base de datos utilizando sus credenciales sin EF (por ejemplo, desde Visual Studio o Sql Server Management Studio)? – Pawel
Sí, utilizando Management Studio puedo hacer lo que quiera en la base de datos, incluida la creación de bases de datos, tablas, actualización de filas, etc. –
¿Utiliza seguridad integrada? – Pawel