net - using entity framework c#




La aplicación no puede andamiar artículos (19)

Compruebe las relaciones entre entidades u otro problema de diseño del modelo. Para las pruebas, cree un nuevo modelo de clase sin relación y use Scaffold para generar controladores y vistas. Funciona para mi.

Creé una aplicación MVC 5 en VS 2013 Professional y luego usé el código EF 6.1 primero con una base de datos existente en SQL Server Express. Cuando intento crear las vistas, estoy usando el "Nuevo elemento de andamiaje ..." y luego selecciono el "Controlador MVC 5 con vistas, usando Entity Framework". Selecciono las clases de modelo y contexto y hago clic en Aceptar. Entonces aparece el siguiente mensaje de error y no se crea ningún código. He desinstalado EF Power Tools con el mismo error.

Error

Se produjo un error al ejecutar el generador de código seleccionado: 'El objetivo de una invocación ha generado una excepción'.

También he intentado desinstalar / reinstalar VS 2013 y SQL Server sin cambios.

¿Alguna otra idea sobre qué podría causar este error?


EF 6.1 no es compatible con la plantilla de andamios. Utilice EF 5 Chares.


En mi caso, el problema fue causado por un archivo de configuración de la aplicación externa:

<appSettings configSource="appSettings.config" />

Al volver a colocar la configuración de la aplicación en el archivo web.config se resolvió el problema.

<appSettings>
    <add key="webpages:Version" value="3.0.0.0" />
    <add key="webpages:Enabled" value="false" />
    <add key="ClientValidationEnabled" value="true" />
    <add key="UnobtrusiveJavaScriptEnabled" value="true" />
</appSettings>

En mi caso, moví mis cadenas de conexión fuera del Web.config a

<connectionStrings configSource="ConnectionStrings.config"/>

que cuando empecé a recibir el error cuando estaba tratando de andamio.

Se produjo un error al ejecutar el generador de código seleccionado: 'El objetivo de una invocación ha generado una excepción'.

Mover mis cadenas de conexión a la Web.config resolvió mi problema.


En mi caso, tuve que revertir mi constructor DBContext a solo usar una cadena de conexión estática, como se define en web.config

El andamiaje no funcionó cuando usé una cadena de conexión creada dinámicamente.

public MyContext() : base("name=MyContext") { }

Es (soy 99% positivo) un problema de cadena de conexión. Una vez que solucioné el problema en Web.Config, el error desapareció. Primero usé DB, en otro proyecto, y una vez que copié la primera cadena de conexión de DB de App.config en web.config (usando el mismo nombre) funcionó como se esperaba.


Esto resolvió el problema para mí,

Agregando throwIfV1Schema: false a la base de DbContext

Como tal:

public MyDbContext() : base("ConectionStringName", throwIfV1Schema: false) { }

Me doy cuenta de que esta pregunta es vieja ahora, pero pensé que publicaría lo que resolvió mi problema en caso de que ayude a alguien más adelante. En mi caso, fue una combinación de varias cosas mencionadas en otras respuestas. Para asegurar mi cadena de conexión que tenía ...

  1. Mueve la cadena de conexión fuera del archivo Web.config
  2. Movió el nombre del servidor y la contraseña a un archivo separado al que se hace referencia en la parte de Configuración de la aplicación de Web.config
  3. Usé un SqlConnectionStringBuilder para juntar los elementos y luego pasarlo a mi constructor de clase de contexto

Después de hacer esto, no pude crear más controladores. Para solucionar el problema, tuve que ...

  1. Vuelva a colocar la cadena de conexión completa en Web.config Y elimine la referencia al archivo de cadena de conexión externa
  2. Agregue un constructor sin parámetros a mi clase de contexto y public contextClass() : base("name=connectionStringName") { } el nombre de my connectionString así: public contextClass() : base("name=connectionStringName") { }

  3. ¡Reconstruya la solución y vuelva a crear el controlador, y funcionó!


Mi solución fue tan simple como volver a cambiar el nombre de la cadena de conexión en mi configuración web a DefaultConnection . A pesar de que mi dbContext tiene otro nombre!

¡Me tomó 2 horas descubrir esta tontería!


Parece un problema de conexión de configuración / entrada inconsistente a través de Web.config . Para solucionar este problema, siga los pasos a continuación:

Elimine la información relacionada con la conexión (iniciando con <connectionStrings> desde Web.config y elimine los modelos generados hasta ahora).

Ahora genere el modelo y agregará una nueva entrada de conexión en el archivo Web.config . Una vez que se genera el modelo, construya la solución y luego comience a hacer el andamio controlado. funcionará.


Probé la mayoría de los anteriores sin suerte.

Lo que finalmente funcionó fue:

  1. Eliminar la entrada de cadena creada previamente dinámicamente
  2. Eliminar mi modelo (manteniendo todos los controladores y vistas)
  3. Vuelva a crear el modelo de datos de entidad ADO.NET: use el mismo nombre y cree una nueva entrada de cadena de conexión con el mismo nombre que antes.

Luego todo volvió a funcionar, menos 3 horas de tiempo de desarrollo.

  1. volver a agregar (desde una copia de seguridad) todos mis atributos de propiedad a las clases de tabla / entidad

Parece tener algo que ver con la cadena de conexión creada dinámicamente y el modelo. Agradecería cualquier pensamiento sobre lo que podría haber sucedido.


Recibí el mismo error cuando hice algunos cambios en mi modelo. La única forma de resolverlo fue 1) detener / eliminar el proceso 2) limpiar la solución y reconstruir la solución


Si por casualidad está siguiendo "Getting Started with Entity Framework 6 Code First utilizando MVC 5" por Tom Dykstra.

Dupliqué el control de todo y mi cadena de conexión es perfecta. Lo que no me di cuenta fue que copié otro conjunto de ajustes de aplicaciones que ya tengo. Mira abajo

  <appSettings>
    <add key="webpages:Version" value="3.0.0.0" />
    <add key="webpages:Enabled" value="false" />
    <add key="ClientValidationEnabled" value="true" />
    <add key="UnobtrusiveJavaScriptEnabled" value="true" />
  </appSettings>

Mi consejo es revisar cada centímetro de Web.config y estoy seguro de que ese es el culpable.


También me encontré con este problema usando VS 2015. Probé todas las otras soluciones aquí sin éxito. Resultó que mi cadena de conexión (aunque estaba formada exactamente como MS nos dice que la formemos) necesitaba el doble \ para funcionar correctamente.

Esto es lo que NO estaba funcionando:

<add name="DefaultConnection" connectionString="Data Source=(LocalDb)\V11.0;AttachDbFilename=|DataDirectory|\SquashSpiderDB.mdf;Initial Catalog=SquashSpiderDB;Integrated Security=True" providerName="System.Data.SqlClient" />

y aquí es a lo que lo cambié para que el generador de código funcione:

<add name="DefaultConnection" connectionString="Data Source=(LocalDb)\\V11.0;AttachDbFilename=|DataDirectory|\SquashSpiderDB.mdf;Initial Catalog=SquashSpiderDB;Integrated Security=True" providerName="System.Data.SqlClient" />

Observe los caracteres dobles \ delante de V11.0 y el nombre de la base de datos.

Espero que esto le salve a alguien más algún tiempo.

ACTUALIZAR

Esto hace que la generación de código funcione, pero entonces la aplicación no se ejecutará porque \ V11.0 no es una cadena de conexión válida. Me parece que MS tiene un error en la generación de su código cuando analiza la cadena de conexión. Tuve que cambiarlo de nuevo a uno solo después de ejecutar la generación de código para que la aplicación vuelva a funcionar.

ACTUALIZACIÓN 2

Después de una investigación más profunda por parte de mi socio, descubrimos que lo que realmente estaba fallando en la generación de código era el hecho de que habíamos cambiado el campo "Catálogo inicial". Cuando el asistente creó el proyecto, configura automáticamente el catálogo inicial en aspnet--. Luego habíamos cambiado este campo de Catálogo Inicial para ser DB. Esto funcionó muy bien para la aplicación en ejecución. Podría llegar a la base de datos muy bien. Pero por alguna razón esto atornilla la generación de andamios de código. Al volver a colocar el catálogo inicial en su estado anterior (aspnet--, el andamio comenzó a funcionar nuevamente (sin necesidad de \ V11.0).

Espero que ayude a alguien en el futuro.


Tu clase de contexto podría estar lanzando una excepción.

Seguí el libro "C # 6.0 y .NET 4.6 Framework" y uno de los últimos ejercicios de la sección de capa de acceso a datos fue agregar el registro. Bueno, supongo que eso explota al mago del andamio. Probablemente los permisos de archivo en sqllog.txt o HttpRuntime no HttpRuntime definidos ... quién sabe. Cuando comenté todo esto, funcionó de nuevo.

namespace AutoLotDAL.EF
{
    using System.Data.Entity;
    using System.Data.Entity.Infrastructure;
    using System.Data.Entity.Infrastructure.Interception;
    using AutoLotDAL.Interception;
    using AutoLotDAL.Models;
    using System;
    using System.Data.Entity.Core.Objects;
    using System.Web;

    public class AutoLotEntities : DbContext
    {
        //static readonly DatabaseLogger databaseLogger =
        //    new DatabaseLogger($"{HttpRuntime.AppDomainAppPath}/sqllog.txt", true);

        public AutoLotEntities()
            : base("name=AutoLotConnection")
        {
            ////DbInterception.Add(new ConsoleWriterInterceptor());
            //databaseLogger.StartLogging();
            //DbInterception.Add(databaseLogger);

            //// Interceptor code
            //var context = (this as IObjectContextAdapter).ObjectContext;
            //context.ObjectMaterialized += OnObjectMaterialized;
            //context.SavingChanges += OnSavingChanges;
        }

        //void OnObjectMaterialized(object sender,
        //    System.Data.Entity.Core.Objects.ObjectMaterializedEventArgs e)
        //{

        //}

        //void OnSavingChanges(object sender, EventArgs eventArgs)
        //{
        //    // Sender is of type ObjectContext.  Can get current and original values,
        //    // and cancel/modify the save operation as desired.
        //    var context = sender as ObjectContext;
        //    if (context == null)
        //        return;
        //    foreach (ObjectStateEntry item in
        //        context.ObjectStateManager.GetObjectStateEntries(
        //            EntityState.Modified | EntityState.Added))
        //    {
        //        // Do something important here
        //        if ((item.Entity as Inventory) != null)
        //        {
        //            var entity = (Inventory)item.Entity;
        //            if (entity.Color == "Red")
        //            {
        //                item.RejectPropertyChanges(nameof(entity.Color));
        //            }
        //        }
        //    }
        //}

        //protected override void Dispose(bool disposing)
        //{
        //    DbInterception.Remove(databaseLogger);
        //    databaseLogger.StopLogging();
        //    base.Dispose(disposing);
        //}

        public virtual DbSet<CreditRisk> CreditRisks { get; set; }
        public virtual DbSet<Customer> Customers { get; set; }
        public virtual DbSet<Inventory> Inventory { get; set; }
        public virtual DbSet<Order> Orders { get; set; }
    }
}

Tuve el mismo mensaje de error. Intenté agregar una nueva Data context class desde el cuadro de diálogo Agregar controlador y luego obtuve un error diferente:

There was an error running the selected code generator:
'Sections must only appear once per config file. See the help topic
<locations> for exceptions.

Resulta que tenía dos elementos <connectionStrings> en mi archivo web.config. (Había pegado uno desde el archivo app.config de la biblioteca de clases que contenía mi modelo de Entity Framework).


Usando Visual Studio 2015

El servidor mysql actualizado y en el proceso el mysql para estudios visuales se actualizó de 6.9.7 a 6.9.8

En mi configuración web todavía había una referencia a la antigua versión 6.9.7

Aquí está mi git diff que resolvió el problema:

-      <provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices,MySql.Data.Entity.EF6,Version=6.9.7.0,Culture=neutral,PublicKeyToken=c5687fc88969c44d"></provider>
+      <provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices,MySql.Data.Entity.EF6,Version=6.9.8.0,Culture=neutral,PublicKeyToken=c5687fc88969c44d"></provider>

Usando: VS 2015 Community Edition y EF 6.1.3 Se implementó también: el método Seed, con una clase personalizada, y se configuró en el archivo web.config para ejecutarse cada vez que cambia el modelo. Esto parece estar relacionado con algunos errores de configuración en el archivo web.config, en mi caso, como algunos de los casos que veo en esta publicación con otras secciones del archivo, la sección se repitió con un contenido diferente, pero se repite la etiqueta principal por supuesto. El caso de la sección fuera de lugar, sobre la sección, también es la causa del mismo comportamiento y el mensaje estrecho al intentar el andamio.


todo el mundo. Sé que llego un poco tarde, pero creo que todavía es válido compartir mi experiencia con este problema.

Me enfrenté a este mensaje en dos proyectos y en ambos casos el problema fue con la cadena de conexión.

En el primer caso fue "InitialCatalog" en lugar de "Initial Catalog" (separado).

En el segundo caso, el nombre del servidor (parámetro Fuente de datos) fue incorrecto.

Espero que ayude.

Atentamente.





asp.net-mvc-scaffolding