Проблемы с формированием шаблонов ASP.NET при попытке добавить файл сопоставления

В частности, я пытаюсь построить контроллеры WebAPI с помощью шаблонов Microsoft, WebAPI 2.1, MVC 5.1.1 и Visual Studio 2013 Update 2 RC. Я заметил, что когда я пытаюсь добавить файл сопоставления, как показано ниже, в контексте, я получаю сообщения об ошибках только при запуске шаблона. Я пробовал все, что мог придумать, но я все еще получаю сообщения при добавлении такой строки:

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Configurations.Add(new AnswerMap());

Дает мне следующее сообщение об ошибке в диалоговом окне после того, как строительные леса потратили 10 или более секунд на что-то:

    Error
    There was an error running the selected code generator: 
    'Exception has been thrown by the target of an invocation'

Проверяя причины этого в Интернете, я вижу много разных решений, но ни одно из них мне не помогает. Большинство решений для устранения этой ошибки, по-видимому, включают в себя выход, повторный запуск, перестройку или комбинацию вещей. Некоторые пользователи даже не могут решить проблему. Если я не могу найти больше информации о том, что не так, то это действительно сложно.

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

Обратите внимание, что я уже рассмотрел:

Ошибка формирования шаблонов Visual Studio 2013

Здесь ничего не помогает. Я переустанавливал леса несколько раз. Проблема исчезнет, ​​если я не добавлю файл сопоставления, и вернется, если я добавлю его снова. Когда я просто использую свой контекст, обычно все в порядке.

Вот код, который я использую для контекста

using Data.Mapping.Enum;
using Entities.Models.Enum;
using System;
using System.Collections.Generic;
using System.Data.Entity;
using System.Diagnostics;
using System.Data.Entity.ModelConfiguration.Conventions;
using System.Linq;
using System.Web;
using Entities.Models.Core;
using System.Data.Entity.ModelConfiguration;
using System.ComponentModel.DataAnnotations.Schema;

namespace WebRole1.Models
{ 
    public partial class testCertContext1 : DbContext
    {
        public testCertContext1()
            : base("name=testCertContext1")
        {
        }
        public DbSet<Answer> Answers { get; set; }

        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            modelBuilder.Conventions.Remove<OneToManyCascadeDeleteConvention>();
            modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
            modelBuilder.Configurations.Add(new AnswerMap2());
        }
    }

    public class AnswerMap2 : EntityTypeConfiguration<Answer>
    {
        public AnswerMap2()
        {
            // Primary Key
            this.HasKey(t => t.AnswerId);

            // Identity
            this.Property(t => t.AnswerId)
                .HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);

            // Table & Column Mappings
            this.ToTable("Answer");
            this.Property(t => t.AnswerId).HasColumnName("AnswerId");
            this.Property(t => t.Text).HasColumnName("Text");

        }
    }
}

person Community    schedule 16.04.2014    source источник
comment
Покажите код для AnswerMap. Делает ли он что-то, чтобы вызвать исключение?   -  person Dismissile    schedule 16.04.2014
comment
Я добавлю код для AnswerMap в вопрос. Однако обратите внимание, что он отлично работает при добавлении в контекст и при обычном использовании базы данных. Единственное, что не работает, это подмости. Я действительно хотел бы, чтобы был какой-то способ увидеть сообщение, стоящее за этим исключением, чтобы я мог получить некоторые идеи о том, на что смотреть.   -  person    schedule 16.04.2014
comment
не могли бы вы сообщить нам, какая версия веб-API и версия Asp.net MVC установлены в вашем VS.   -  person Palak Bhansali    schedule 18.04.2014
comment
WebAPI 2.1, MVC 5.1.1, Visual Studio 2013, обновление 2, версия-кандидат   -  person    schedule 18.04.2014
comment
Возможно, стоит проверить журналы событий Windows, чтобы увидеть, возможно, там было зарегистрировано основное исключение лесов.   -  person Nathan    schedule 18.04.2014
comment
В качестве совета используйте на 1 версию ниже технологии Microsoft, чтобы столкнуться с несколькими двусмысленными ошибками, такими как эта, и не тратьте свое время. Обратите внимание, что такие проблемы будут решены владельцем (Microsoft) через некоторое время. С Уважением.   -  person Amirhossein Mehrvarzi    schedule 20.04.2014
comment
@AmirHosseinMehrvarzi - думаю, это очень хороший совет.   -  person    schedule 21.04.2014
comment
Формирование обычно делает предположения о том, откуда берутся другие классы, и пытается создать подмножество проекта, чтобы можно было запустить OnModelCreating. Попробуйте переместить свои классы (возможно, AnswerMap) в один проект.   -  person Yishai Galatzer    schedule 21.04.2014
comment
Спасибо, но я это уже пробовал. Теперь карта ответов находится там же, где и модель. Все равно не повезло.   -  person    schedule 22.04.2014
comment
@Melina, у меня есть подозрение, в чем проблема. если вы удалите сопоставление и замените его аннотациями модели, а затем попробуете использовать скаффолд, получится ли это?   -  person Dave Alperovich    schedule 22.04.2014
comment
также, интересно, вы можете сделать нормальный контроллер с моделью ответов?   -  person Dave Alperovich    schedule 22.04.2014
comment
Дэйв А. Он отлично работает с аннотациями моделей.   -  person    schedule 24.04.2014
comment
@Melina Я так и думал. На самом деле существует разница между свободным API и аннотациями. Леса зависят от аннотаций модели. Когда отношения вызываются с помощью Fluent API, они плохо взаимодействуют с MVC. Например, ограничения Fluent API не будут запускать проверки Razor.   -  person Dave Alperovich    schedule 24.04.2014
comment
это те проблемы, с которыми мы сталкиваемся, используя Entities for View Models. Я тоже часто начинаю с POCO, но это скользкий путь. Если вы используете аннотации для моделей просмотра, этой проблемы не возникнет.   -  person Dave Alperovich    schedule 24.04.2014
comment
Можете ли вы добавить больше ведения журнала в приложение. Найдите источник, InnerException, StackTrace и т. Д. Для исключения. Это помогло мне решить аналогичную проблему.   -  person spetzz    schedule 25.04.2014


Ответы (4)


У меня была похожая проблема.
Проблема в моем случае заключалась в том, что строка подключения была сохранена в другом файле, отличном от классического файла web.config, чтобы не сохранять ее в моем репозитории Git.
Что-то вроде:

  <connectionStrings configSource="cstring.config"/>

Несмотря на то, что в другом файле он был настроен правильно, похоже, что скаффолд не решает преобразования. В итоге он просто не находит базу данных.
Итак, мой обходной путь:
- скопировать строку подключения к базе данных в web.config
- scaffold
- вернуться в предыдущее состояние.

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

person Leonardo Festa    schedule 05.02.2015
comment
Это сработало для меня. Я также использую configSource, и перемещение connectionString в web.config решило проблему. Спасибо - person Augusto Barreto; 03.03.2015

У меня была такая же проблема раньше, я использую шаблон репозитория с единицей работы, и я изменил шаблон обратного проектирования Code First, чтобы добавить метаданные к своим объектам. Когда я думал отменить много вещей, я вспомнил, что использовал .Net Framework 4.5.1!
После изменения целевой платформы .Net в свойствах проекта на 4.5 проблема исчезла! Я изменил его во всех проектах.

person Bruno Nunes    schedule 21.04.2014

Мне нужно было убедиться, что теги <configSettings>, <appSettings> и <connectionStrings> НЕ используют атрибут configSource.

person Cord Rehn    schedule 02.04.2015
comment
У меня нет configSource для начала, но я все еще получаю ту же ошибку при следовании руководству по адресу: asp.net/mvc/overview/getting- началось/. Проблема возникает при попытке добавить новые элементы каркаса в соответствии с инструкциями. Я использую обновление 5 VS2013 и SQL Server 2012 Express. - person Stack0verflow; 05.11.2015

Я столкнулся с аналогичной проблемой, следуя этому учебник.

Решение состояло в том, чтобы поместить тег connectionString после configSections в web.config. Тогда это сработало!

person Markus Huber    schedule 29.03.2016