visual studio remove migrations framework first existing enable code automatic entity-framework ef-migrations

studio - Cómo nombrar explícitamente la base de datos al usar Entity Framework Migrations 4.3



remove migration entity framework core (4)

Recientemente comencé a utilizar las migraciones de Entity Framework y noté que el nombre de la base de datos no me funciona cuando ejecuto el comando Update-Database .

Mi conexión es:

<connectionStrings> <add name="DataContext" connectionString="Server=./SQLEXPRESS;Initial Catalog=TestDB;Trusted_Connection=Yes;" providerName="System.Data.SqlClient" /> </connectionStrings>

La primera vez que ejecuto Update-Database mi base de datos se crea con el nombre correcto TestDB . Sin embargo, tan pronto como realice un cambio en una de mis entidades, no se actualizará por mí a menos que agregue un nombre de proyecto de inicio (estoy usando una solución de proyecto múltiple):

Update-Database -StartUpProjectName "TestDB.Data"

Esto luego crea otra base de datos nueva que las migraciones siempre seguirán usando. No me importa tener que poner el comando StartUpProjectName, pero ¿hay alguna manera de anular el nombre predeterminado para la base de datos que esto produce? Siempre crea la base de datos como

TestDB.Data.DataContext

¿Hay alguna forma de garantizar que la base de datos creada al pasar el nombre StartUpProject se llame simplemente TestDB o se trata de una limitación del uso de la configuración StartUpProjectName?

Como nota, creo que la razón por la que necesito especificar StartUpProjectName es que tengo una configuración de proyecto de varias capas. El archivo de configuración de migraciones está en mi proyecto ''Datos'', las entidades / modelos están en mi proyecto ''Dominio'', etc. Además, actualmente no tengo ninguna opción de inicialización en mi archivo Global.asax.cs como lo hubiera usado anteriormente en código primero ef 4.2. Entonces, en mi proyecto, solo tengo un DataContext en mi proyecto de datos y la configuración de migraciones también en ese proyecto.

EDITAR:

Desde que originalmente configuré esta pregunta, tropecé con la forma "correcta" de nombrar una base de datos en una solución multiproyecto. Si bien la respuesta siguiente funcionará, significa que está duplicando su web.config en otra área que no es una solución ideal. En su lugar, puede poner el nombre en su DbContext haciendo algo como esto (DataContext es solo el nombre que usé en mi proyecto):

public class DataContext : DbContext { public DataContext() : base("DatabaseNameHere") { } public DbSet<Table1> Table1 { get; set; } public DbSet<Table2> Table2 { get; set; } public virtual void Commit() { base.SaveChanges(); } }

Gracias,

Rico


Intenté con el último EF5 de Nuget.

Sin embargo, Update-Database no lee el App.config del proyecto que contiene las migraciones (igual que la respuesta hace 1 año) pero solo leerá *.config desde el proyecto de inicio . Es genial, pero descubro cómo Add-Migration y Update-Database encuentran aquí una cadena de conexión adecuada:

  1. Está tratando de obtener primero la cadena de conexión "DefaultConnection"
  2. Luego está tratando de obtener el nombre de la cadena de conexión en función del nombre de la clase de contexto. Por ejemplo, tengo la clase MyContext derivada de DbContext para poder usar el nombre de la cadena de conexión "MyContext". Útil cuando tengo múltiples conexiones de db.
  3. Si no se encuentran los nombres de las cadenas de conexión anteriores, fallará y no mostrará ninguna cadena de conexión "DefaultConnection" a menos que proporcione el parámetro -ConnectionStringName . Consulte la get-help Update-Database para ver la página de ayuda en la consola del Administrador de paquetes.

No hay intento de reintento o de repliegue, por lo que si la "Conexión por defecto" contiene una cadena de conexión incorrecta, simplemente mostrará un error.

Si existen tanto DefaultConnection como el nombre de contexto en las cadenas de conexión, prevalecerá DefaultConnection.

Preferiría que el # 2 se convirtiera en la primera opción porque el nombre es más específico, pero los pasos anteriores son lo que hacen las Migraciones EF5 al intentar conectarse a la base de datos.


Al hacer la update-database , debe especificar el proyecto que contiene las migraciones. Asegúrese de tener un archivo app.config en ese proyecto que contenga la cadena de conexión correcta.

Al dividir una aplicación en varios proyectos, la cadena de conexión utilizada al ejecutar la aplicación es la del proyecto iniciado. Al migrar, la cadena de conexión utilizada es la del proyecto que contiene las migraciones.

Cuando hice una configuración similar tuve que agregar la cadena de conexión en dos lugares. Un poco incómodo, pero funciona.


Puede evitar administrarlo en app.config ofreciéndolo como parámetro:

Update-Database -Verbose -ConnectionString "CONNECTIONSTRING" -ConnectionProviderName "System.Data.SqlClient" -StartupProjectName WEBSITE_PROJECT -ProjectName MIGRATION_PROJECT

Easy-piezy, si te gusta escribir interminablemente.


Puede tener su cadena de conexión almacenada en el archivo web.config en su proyecto de sitio web y los archivos DBContext y migración en otro proyecto y aún compartir la misma cadena de conexión. Sin embargo, debe asegurarse de que además de configurar el proyecto de datos (o cualquier proyecto que contenga DBContext, etc.) como proyecto predeterminado para la consola de Package Manager, también deba asegurarse de que su sitio web esté configurado como predeterminado. Proyecto StartUp !!!

No puedo ver esto documentado en ninguna parte, pero las frenéticas 24 horas de no poder entender por qué mis migraciones se aplicaban de repente a un DB de SQLExpress me llevaron a esta conclusión.