2011-04-07 12 views
9

Entity Framework 4.1 Code First funciona muy bien con SQLEXPRESS en localhost. Sin embargo, ahora estoy listo para conectarme a un SQL 2008 server normal.EF 4.1 CF: permiso CREATE DATABASE denegado en la base de datos 'master'

  1. Creé una nueva base de datos "NewEfDatabase".

  2. Luego cambié mi "ApplicationServices" connectionString en Web.config para apuntar a mi nueva base de datos con seguridad integrada.

Pero entonces me sale este error:

"CREATE DATABASE permission denied in database 'master'."

Entonces ...

a) ¿Qué hace permisos EF 4.1 CF necesita en dicho servidor SQL para hacer su trabajo ?

b) ¿Puedo configurar una base de datos vacía en SQL 2008 para EF 4.1 CF, o tengo que dejar que haga todo el trabajo por mí? (No estoy seguro de que mi DBA agradecería dejar que mi aplicación EF tiene derechos para hacer cualquier cosa fuera de una determinada base de datos)

Respuesta

13

hiciste Asegúrese de ajustar el inicializador Base de datos para null en el código:

Database.SetInitializer<MyDbContext>(null); 

Todas las implementaciones incorporadas si el inicializador puede intentar eliminar o crear una nueva base de datos. El error que recibe indica que EF intentó eliminar/crear una base de datos pero no tiene el derecho de hacerlo en su instancia de SQL Server. La línea de arriba es la única opción para evitar esto en general y es adecuada (creo que incluso es absolutamente necesaria) para entornos en vivo de todos modos donde no desee eliminación accidental (debido a cambios en el modelo o algo así).

+0

No, no lo había intentado. Voy a darle una oportunidad. En ese caso, ¿debo migrar mis datos y mi esquema desde mi SQLEXPRESS local? Me imaginé que podría construir la base de datos en mi ubicación de destino. Pero se olvidó del paso de crear y soltar que realiza. –

+1

@Dan: Sí, debe migrar el DB a la instancia de destino si establece el inicializador en 'null'. En este caso, el esquema de BD y el modelo de EF deben coincidir, EF no actualizará o recreará el esquema y probablemente lanzará excepciones si el esquema y el modelo no coinciden. – Slauma

+1

La forma en que manejo esto es crear una lista de nombres de PCs desarrolladores, y solo llamo a SetInitializer (para volver a crear la base de datos) si la aplicación se está ejecutando en una de esas PC. Para cualquier otra máquina, supongo que la base de datos ya se habrá implementado allí. –

3

Configure un inicio de sesión para su aplicación dentro del servidor SQL. Dale a ese usuario el permiso de dbcreator (haciendo clic derecho en el inicio de sesión, ve a los roles del servidor y marca la casilla "dbcreator")

Cuestiones relacionadas