c# - studio - entity framework 6
Actualice Entity Framework a 6.1-el índice ya existe errores (3)
Acabo de actualizar un proyecto con un modelo de código primero de Entity Framework 6.0.2 a 6.1.0.
Después de la actualización, context.Database.CompatibleWithModel(true)
devuelve false, por lo que EF cree que la base de datos ya no es compatible con el modelo. No he cambiado nada más, solo he actualizado EF.
Ejecuté Add-Migration
para ver qué sucedería, y EF creó una gran migración que parece crear un índice en cada propiedad de clave externa en cada tabla:
public override void Up()
{
CreateIndex("dbo.ActivityStreams", "UserId");
CreateIndex("dbo.Users", "OfficeId");
CreateIndex("dbo.Offices", "ParentId");
CreateIndex("dbo.Rosters", "UserId");
...and many more similar lines...
¿Supongo que esto está relacionado con las nuevas características del índice en EF 6.1? Un poco extraño, pero está bien.
Cuando Update-Database
para aplicar la nueva migración, hay errores de que los índices ya existen. Buscando en la base de datos y en las migraciones anteriores, casi todos los índices ya existen.
¿Qué he hecho mal aquí? ¿Existe algún procedimiento para actualizar EF?
Como se mencionó en otras respuestas, esto se debe a un error en Entity Framework. La respuesta aceptada de copiar el código DropIndex
en el método Up
provoca un trabajo innecesario en la base de datos. En su lugar, sugeriría que el curso de acción correcto es eliminar el contenido de los métodos Up
y Down
ya que estos índices ya existen y no es necesario eliminarlos.
Re: Sus llaves foráneas están siendo creadas, encontré la siguiente información en el siguiente enlace:
http://blog.oneunicorn.com/2014/02/15/ef-6-1-creating-indexes-with-indexattribute/ indica lo siguiente:
La convención ForeignKeyIndexConvention Code First hace que se creen índices para las columnas de cualquier clave foránea en el modelo, a menos que estas columnas ya tengan un índice especificado utilizando IndexAttribute. Si no desea índices para sus FK, puede eliminar esta convención:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Conventions.Remove<ForeignKeyIndexConvention>();
}
Yo tuve exactamente el mismo problema. Lo arreglé recreando los Índices.
Lo he logrado copiando y pegando los DropIndexes del método Down en la migración al método Up. Entonces, efectivamente, primero elimine los índices y luego vuelva a crearlos. No tengo idea de por qué esto es necesario pero solucionó el problema.