Подтвердить что ты не робот

Приложение не может использовать элементы леса

Я создал приложение MVC 5 в VS 2013 Professional, а затем использовал код EF 6.1 сначала с существующей БД на SQL Server Express. Когда я пытаюсь создать представления Im, используя "Новый элемент леса...", затем выберите "Контроллер MVC 5 с представлениями, используя Entity Framework". Я выбираю классы модели и контекста и нажимаю OK. Затем появляется следующее сообщение об ошибке, и код не создается. Ive удалил EF Power Tools с той же ошибкой.

Ошибка

Произошла ошибка с запуском выбранного генератора кода: "Исключение имеет был брошен мишенью вызова.

Я также попытался удалить/переустановить VS 2013 и SQL Server без каких-либо изменений.

Любые другие идеи о том, что может вызвать эту ошибку?

4b9b3361

Ответ 1

У меня тоже была эта проблема, Я решил проблему, вызвав base.onModelCreating в моем контексте БД

base.OnModelCreating(modelBuilder);

Ответ 2

В моем случае я переместил строки подключения из Web.config в

<connectionStrings configSource="ConnectionStrings.config"/>

что, когда я начал получать ошибку, когда пытался сделать эшафот.

Произошла ошибка при запуске выбранного генератора кода: "Исключение было выбрано целью вызова.

Перемещение моих строк подключения обратно в Web.config решило мою проблему.

Ответ 3

Это решило проблему для меня,

Добавление throwIfV1Schema: false к базе DbContext

Итак:

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

Ответ 4

Я столкнулся с такой же проблемой при создании контроллера с использованием scaffold с помощью "ASP.NET MVC5 с использованием представлений с Entity Framework"

Проблема заключалась в том, что я предоставил тег <connectionStrings> до <configSections> в web.config. установка <connectionStrings> после <configSections> разрешила проблему.

Я предполагаю, что в то время как строительные леса ASP.NET MVC хотят сначала разрешить Entity Framework, а затем строку соединения, поскольку я предоставил строку соединения раньше, чтобы после разрешения версии Entity Framework она не могла найти строку подключения, чтобы она проблема брошенного вызова.

Ответ 5

Поздний ответ; но, я отправляю эти ответы с надеждой, что кто-то может использовать этот ответ для решения своей проблемы.

По какой-то причине, если ваша программа НЕ МОЖЕТ прочитать информацию connectionString (либо из web.config, либо из других средств), тогда эта ошибка будет выбрана.

Убедитесь, что правильная информация connectionString извлекается правильно без каких-либо проблем.

Ответ 6

У меня было такое же сообщение об ошибке. Я попытался добавить новый Data context class из диалогового окна Add Controller, а затем получил другую ошибку:

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

Оказывается, у меня было два элемента <connectionStrings> в моем файле web.config. (Я вставил один из app.config библиотеки классов, который содержал мою модель Entity Framework.)

Ответ 7

В моем случае мне пришлось вернуть конструктор DBContext только для использования статической строки соединения, как определено в web.config

Леса не работали, когда я использовал динамически созданную строку подключения.

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

Ответ 8

У меня была такая же проблема, когда он не добавлял элементы эшафотов, кажется, что удаление объекта-рамки через консоль диспетчера пакетов nuget работает

Запустить Консоль диспетчера пакетов:

Инструменты → Диспетчер пакетов NuGet → Консоль диспетчера пакетов

Удалить:

UnInstall-Package EntityFramework

Чтобы переустановить:

Install-Package EntityFramework

Или в одной команде:

Update-Package -reinstall EntityFramework

Надеюсь, это поможет кому-то, так как мне потребовалось некоторое время, чтобы прийти к этому.

Ответ 9

Это может помочь решить вашу ошибку.

В моем OnModelCreating я делал это для каждого объекта:

modelBuilder.Configurations.Add(new EntityTypeConfiguration<EntityModel>);

Когда я изменил его на следующий, я прекратил получать ошибку, которую вы получаете.

modelBuilder.Entity<EntityModel>();

Ответ 10

Я попробовал большинство из вышеперечисленного без везения.

Что в итоге получилось:

  • Удалить ранее динамически создаваемую запись строки
  • Удалить мою модель (сохраняя все контроллеры и представления)
  • Восстановить модель данных сущности ADO.NET - с использованием того же имени, создав новую запись строки подключения с тем же именем, что и раньше

Затем все работало снова, минус 3 часа времени разработки.

  1. повторно добавить (из резервной копии) все мои атрибуты свойств в классы таблицы/сущности

Кажется, что-то связано с динамически созданной строкой подключения и моделью. Почитал бы любые мысли о том, что могло бы произойти.

Ответ 11

В моем случае я решил проблему со строкой подключения в файле web.config.

Предотвращает проблему, которую я имею <connectionStrings configSource="Configs\ConnectionString.config"/>

и я не знаю почему, но vs can not подключается к базе данных и терпит неудачу.

после изменения

<connectionStrings> <add name="UIBuilderContext" connectionString="metadata=res:/ ..... " /> </connectionStrings>

и он работает

Ответ 12

Мое решение было так же просто, как изменить имя строки подключения в моей веб-конфигурации на DefaultConnection. Хотя мой dbContext имеет другое имя!

Взял мне 2 часа, чтобы узнать эту ерунду!

Ответ 13

Кажется, проблема связана с установкой/несогласованным входом через Web.config. Чтобы устранить эту проблему, выполните следующие действия:

Удалите связанную с подключением информацию (смотри с помощью <connectionStrings> from от Web.config и удаляйте модели, созданные до сих пор.

Теперь создайте модель и добавьте новую запись в файл Web.config. После создания модели создайте решение, а затем начните управлять лесами. он будет работать.

Ответ 14

Я тоже столкнулся с этой проблемой, используя VS 2015. Я пробовал все другие решения здесь без успеха. Оказалось, что моя строка соединения (хотя и сформирована именно так, как MS говорит нам о ее формировании) нуждается в double\для правильной работы.

Вот что это было, что НЕ работало:

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

и вот что я изменил для того, чтобы заставить генератор кода работать:

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

Обратите внимание на двойные символы\перед V11.0 и именем базы данных.

Надеюсь, это немного сэкономит время.

UPDATE

Это приведет к генерации кода, но тогда приложение не будет запущено, потому что \V11.0 не является допустимой строкой соединения. Это похоже на то, что у MS есть ошибка в генерации кода, когда он анализирует строку соединения. Мне пришлось изменить его на один\после того, как я запустил генерацию кода, чтобы заставить приложение работать снова.

ОБНОВЛЕНИЕ 2

После некоторого дополнительного копания моим партнером мы выяснили, что то, что действительно закручивало создание кода, было фактом, что мы изменили поле "Начальный каталог". Когда проект был создан Мастером, он автоматически устанавливает исходный каталог в aspnet--. Затем мы изменили это поле Начального каталога как DB. Это отлично работало для приложения. Он может получить доступ к базе данных просто отлично. Но по какой-то причине это подрывает генерацию кода подмостей. Вернув исходный каталог обратно в то, что было раньше (aspnet--, строительные леса снова начали работать (без необходимости \V11.0).

Надеюсь, что это поможет кому-то в будущем.

Ответ 15

Проверьте отношения между объектами или другой проблемой дизайна модели. Для тестирования создайте новую модель класса без каких-либо связей и используйте Scaffold для создания контроллеров и представлений. Работает для меня.

Ответ 16

Я получал ту же ошибку, когда внес некоторые изменения в мою модель. Только так я смог решить 1) остановить/убить процесс 2) очистить раствор и перестроить решение

Ответ 17

Если вы случайно следуете "Начало работы с Entity Framework 6 Code First using MVC 5" Тома Дыкстры.

Я дважды проверял все, и моя строка соединения идеальна. Я не понял, что я скопировал другой набор приложений, которые у меня уже есть. Посмотрите ниже

  <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>

Мой совет - проверить каждый дюйм Web.config, и я уверен, что это преступник.

Ответ 18

В моем случае NuGet добавила следующего провайдера в web.config:

<provider invariantName="System.Data.SqlServerCe.4.0" type="System.Data.Entity.SqlServerCompact.SqlCeProviderServices, EntityFramework.SqlServerCompact"/>

Когда я изменил провайдера на

<provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer"/>

Это решило проблему (стоило мне около 5 часов, хотя чтобы понять это:-()

Ответ 19

У меня была такая же ошибка. Вот две вещи, которые я сделал для устранения проблемы:

  • В моем контексте добавлено имя для базы: base ( "name = connectionstringname" )
  • Я допустил ошибку в строке подключения и исправил ее.

Ответ 20

Это (я на 99% положительный) проблема с строкой подключения. Как только я исправил проблему в Web.Config, ошибка исчезла. Я использовал DB сначала, в другом проекте, и как только я скопировал первую строку соединения DB из App.config в web.config(с тем же именем), он работал как ожидалось.

Ответ 21

Использование Visual Studio 2015

Модернизированный сервер mysql, и в этом процессе mysql для визуальных студий был повышен с 6.9.7 до 6.9.8

В моей веб-конфигурации все еще была ссылка на старую версию 6.9.7

Вот мой git diff, который решил проблему:

-      <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>

Ответ 22

Я понимаю, что этот вопрос старый, но я думал, что опубликую, что решило мою проблему, если это поможет кому-нибудь позже. В моем случае это было сочетание нескольких вещей, упомянутых в других ответах. Чтобы защитить мою строку подключения, я...

  • Перенос строки подключения из файла Web.config
  • Перемещено имя сервера и пароль к отдельному файлу, указанному в разделе AppSettings Web.config
  • Используется SqlConnectionStringBuilder, чтобы объединить элементы и передать их в мой конструктор класса контекста.

После этого я не смог создать никаких контроллеров. Чтобы решить проблему, мне пришлось...

  • Поместите всю строку подключения обратно в Web.config И удалите ссылку на внешний файл строки подключения
  • Добавьте конструктор без параметров в мой контекстный класс и дайте ему имя моей connectionString следующим образом: public contextClass() : base("name=connectionStringName") { }

  • Восстановите решение и снова создайте контроллер, и он сработает!

Ответ 23

все. Я знаю, что немного опоздал, но я думаю, что это все еще справедливо, чтобы поделиться своим опытом с этой проблемой.

Я столкнулся с этим сообщением в двух проектах, и в обоих случаях проблема была связана с строкой подключения.

В первом случае это был "InitialCatalog" вместо "Initial Catalog" (разделенный).

Во втором случае имя сервера (параметр источника данных) было неправильным.

Надеюсь, это поможет.

С уважением.

Ответ 24

По какой-то причине, когда я комментирую раздел oracle.manageddataaccess.client между <configSections> в web.config, он работал. (VS 2015 и ODT 12)

<configSections>   
    <section name="entityFramework" type" />
    <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
    <!--<section name="oracle.manageddataaccess.client" />-->
</configSections>

Ответ 25

В моем случае проблема была вызвана файлом настроек внешнего приложения:

<appSettings configSource="appSettings.config" />

Приведение настроек приложения обратно в файл web.config устраняет проблему.

<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>

Ответ 26

У меня было это:

<appSettings configSource="App_Config\Server\AppSettings.config" />
<connectionStrings configSource="bin\Connections.config" />

Я должен был удалить ОБА и положить обратно.

<connectionStrings>
    <add name="UIBuilderContext" connectionString="metadata=res:/ ..... " />
  </connectionStrings>

Удаление только что вызвало ту же ошибку.

Ответ 27

Использование: VS 2015 Community Edition и EF 6.1.3 Реализован также: метод Seed с персонализированным классом и настроен в файле web.config для запуска каждый раз, когда модель изменяется. Это, похоже, связано с некоторой неправильной конфигурацией в файле web.config, в моем случае, как и в некоторых случаях, которые я вижу в этом сообщении, с другими разделами файла, раздел повторялся с другим контентом, но он повторял основной тег конечно. Случай с секцией не по месту, по разрезу, также вызывает одно и то же поведение и узкое сообщение при попытке эшафот.

Ответ 28

Ваш класс контекста может вызывать исключение.

Я читал в книге "С# 6.0 и .NET 4.6 Framework", и одним из последних упражнений раздела уровня доступа к данным было добавление журнала. Ну, я думаю, это взрывает волшебника леса. Вероятно, разрешения файлов на sqllog.txt или HttpRuntime не определены... кто знает. Когда я прокомментировал все это, он снова работал.

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; }
    }
}

Ответ 29

EF 6.1 не поддерживает использование шаблона для строительных лесов EF 5 Chares