Ответ 1
У меня тоже была эта проблема, Я решил проблему, вызвав base.onModelCreating в моем контексте БД
base.OnModelCreating(modelBuilder);
Я создал приложение 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 без каких-либо изменений.
Любые другие идеи о том, что может вызвать эту ошибку?
У меня тоже была эта проблема, Я решил проблему, вызвав base.onModelCreating в моем контексте БД
base.OnModelCreating(modelBuilder);
В моем случае я переместил строки подключения из Web.config в
<connectionStrings configSource="ConnectionStrings.config"/>
что, когда я начал получать ошибку, когда пытался сделать эшафот.
Произошла ошибка при запуске выбранного генератора кода: "Исключение было выбрано целью вызова.
Перемещение моих строк подключения обратно в Web.config решило мою проблему.
Это решило проблему для меня,
Добавление throwIfV1Schema: false
к базе DbContext
Итак:
public MyDbContext() : base("ConectionStringName", throwIfV1Schema: false) { }
Я столкнулся с такой же проблемой при создании контроллера с использованием scaffold с помощью "ASP.NET MVC5 с использованием представлений с Entity Framework"
Проблема заключалась в том, что я предоставил тег <connectionStrings>
до <configSections>
в web.config. установка <connectionStrings>
после <configSections>
разрешила проблему.
Я предполагаю, что в то время как строительные леса ASP.NET MVC хотят сначала разрешить Entity Framework, а затем строку соединения, поскольку я предоставил строку соединения раньше, чтобы после разрешения версии Entity Framework она не могла найти строку подключения, чтобы она проблема брошенного вызова.
Поздний ответ; но, я отправляю эти ответы с надеждой, что кто-то может использовать этот ответ для решения своей проблемы.
По какой-то причине, если ваша программа НЕ МОЖЕТ прочитать информацию connectionString (либо из web.config, либо из других средств), тогда эта ошибка будет выбрана.
Убедитесь, что правильная информация connectionString извлекается правильно без каких-либо проблем.
У меня было такое же сообщение об ошибке.
Я попытался добавить новый 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.)
В моем случае мне пришлось вернуть конструктор DBContext только для использования статической строки соединения, как определено в web.config
Леса не работали, когда я использовал динамически созданную строку подключения.
public MyContext() : base("name=MyContext") { }
У меня была такая же проблема, когда он не добавлял элементы эшафотов, кажется, что удаление объекта-рамки через консоль диспетчера пакетов nuget работает
Запустить Консоль диспетчера пакетов:
Инструменты → Диспетчер пакетов NuGet → Консоль диспетчера пакетов
Удалить:
UnInstall-Package EntityFramework
Чтобы переустановить:
Install-Package EntityFramework
Или в одной команде:
Update-Package -reinstall EntityFramework
Надеюсь, это поможет кому-то, так как мне потребовалось некоторое время, чтобы прийти к этому.
Это может помочь решить вашу ошибку.
В моем OnModelCreating я делал это для каждого объекта:
modelBuilder.Configurations.Add(new EntityTypeConfiguration<EntityModel>);
Когда я изменил его на следующий, я прекратил получать ошибку, которую вы получаете.
modelBuilder.Entity<EntityModel>();
Я попробовал большинство из вышеперечисленного без везения.
Что в итоге получилось:
Затем все работало снова, минус 3 часа времени разработки.
Кажется, что-то связано с динамически созданной строкой подключения и моделью. Почитал бы любые мысли о том, что могло бы произойти.
В моем случае я решил проблему со строкой подключения в файле web.config.
Предотвращает проблему, которую я имею <connectionStrings configSource="Configs\ConnectionString.config"/>
и я не знаю почему, но vs can not подключается к базе данных и терпит неудачу.
после изменения
<connectionStrings>
<add name="UIBuilderContext" connectionString="metadata=res:/ ..... " />
</connectionStrings>
и он работает
Мое решение было так же просто, как изменить имя строки подключения в моей веб-конфигурации на DefaultConnection. Хотя мой dbContext имеет другое имя!
Взял мне 2 часа, чтобы узнать эту ерунду!
Кажется, проблема связана с установкой/несогласованным входом через Web.config
.
Чтобы устранить эту проблему, выполните следующие действия:
Удалите связанную с подключением информацию (смотри с помощью <connectionStrings> from от Web.config
и удаляйте модели, созданные до сих пор.
Теперь создайте модель и добавьте новую запись в файл Web.config
. После создания модели создайте решение, а затем начните управлять лесами. он будет работать.
Я тоже столкнулся с этой проблемой, используя 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).
Надеюсь, что это поможет кому-то в будущем.
Проверьте отношения между объектами или другой проблемой дизайна модели. Для тестирования создайте новую модель класса без каких-либо связей и используйте Scaffold для создания контроллеров и представлений. Работает для меня.
Я получал ту же ошибку, когда внес некоторые изменения в мою модель. Только так я смог решить 1) остановить/убить процесс 2) очистить раствор и перестроить решение
Если вы случайно следуете "Начало работы с 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, и я уверен, что это преступник.
В моем случае 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 часов, хотя чтобы понять это:-()
У меня была такая же ошибка. Вот две вещи, которые я сделал для устранения проблемы:
Это (я на 99% положительный) проблема с строкой подключения. Как только я исправил проблему в Web.Config, ошибка исчезла. Я использовал DB сначала, в другом проекте, и как только я скопировал первую строку соединения DB из App.config в web.config(с тем же именем), он работал как ожидалось.
Использование 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>
Я понимаю, что этот вопрос старый, но я думал, что опубликую, что решило мою проблему, если это поможет кому-нибудь позже. В моем случае это было сочетание нескольких вещей, упомянутых в других ответах. Чтобы защитить мою строку подключения, я...
После этого я не смог создать никаких контроллеров. Чтобы решить проблему, мне пришлось...
Добавьте конструктор без параметров в мой контекстный класс и дайте ему имя моей connectionString следующим образом:
public contextClass() : base("name=connectionStringName") { }
Восстановите решение и снова создайте контроллер, и он сработает!
все. Я знаю, что немного опоздал, но я думаю, что это все еще справедливо, чтобы поделиться своим опытом с этой проблемой.
Я столкнулся с этим сообщением в двух проектах, и в обоих случаях проблема была связана с строкой подключения.
В первом случае это был "InitialCatalog" вместо "Initial Catalog" (разделенный).
Во втором случае имя сервера (параметр источника данных) было неправильным.
Надеюсь, это поможет.
С уважением.
По какой-то причине, когда я комментирую раздел 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>
В моем случае проблема была вызвана файлом настроек внешнего приложения:
<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>
У меня было это:
<appSettings configSource="App_Config\Server\AppSettings.config" />
<connectionStrings configSource="bin\Connections.config" />
Я должен был удалить ОБА и положить обратно.
<connectionStrings>
<add name="UIBuilderContext" connectionString="metadata=res:/ ..... " />
</connectionStrings>
Удаление только что вызвало ту же ошибку.
Использование: VS 2015 Community Edition и EF 6.1.3 Реализован также: метод Seed с персонализированным классом и настроен в файле web.config для запуска каждый раз, когда модель изменяется. Это, похоже, связано с некоторой неправильной конфигурацией в файле web.config, в моем случае, как и в некоторых случаях, которые я вижу в этом сообщении, с другими разделами файла, раздел повторялся с другим контентом, но он повторял основной тег конечно. Случай с секцией не по месту, по разрезу, также вызывает одно и то же поведение и узкое сообщение при попытке эшафот.
Ваш класс контекста может вызывать исключение.
Я читал в книге "С# 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; }
}
}
EF 6.1 не поддерживает использование шаблона для строительных лесов EF 5 Chares