FileNotFound исключение при попытке создать контроллер ASP.NET MVC 4 - PullRequest
3 голосов
/ 27 декабря 2011

Я пытаюсь следовать учебному пособию для университета Contoso , только с SQL Server 2008 вместо CE. Я могу подключиться к ядру базы данных в SQL Server Management Studio, используя имя моего компьютера и проверку подлинности Windows. Я не создал базу данных с ним, потому что я пытаюсь использовать EF Code First.

Это моя строка подключения:

<add 
      name="SchoolContext" 
      connectionString="Data Source=CARSON-PC\CARSON;Integrated Security=true" 
      providerName="System.Data.SqlClient"/>

Я пытаюсь добавить контроллер, щелкнув правой кнопкой мыши папку контроллеров и выбрав Add->Controller... и установив получившийся диалог в соответствии с руководством. Я получаю диалоговое окно с сообщением о том, что FileNotFoundException было брошено, и файл является временным dll:

FileNotFoundException while compiling transformation code

Это диалоговое окно открывается пять раз (я полагаю, один раз для каждого из сгенерированных файлов шаблонов), и я получаю контроллер, но без сгенерированных шаблонов.

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

Для полноты вот модель, для которой я пытаюсь сгенерировать контроллер:

public class Student {
    public int StudentID { get; set; }
    public string LastName { get; set; }
    public string FirstMidName { get; set; }
    public DateTime EnrollmentDate { get; set; }
    public virtual ICollection<Enrollment> Enrollments { get; set; }
}

И контекст:

public class SchoolContext : DbContext {
    public DbSet<Student> Students { get; set; }
    public DbSet<Enrollment> Enrollments { get; set; }
    public DbSet<Course> Courses { get; set; }

    protected override void OnModelCreating(modelBuilder As DbModelBuilder) {
        modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
    }
}

Моя строка соединения неверна? Это симптом чего-то не настроенного прямо с сервером? Что я тут напортачил?

Ответы [ 2 ]

2 голосов
/ 27 декабря 2011

Я только что проверил это с ASP.NET MVC 4, SQL SERVER 2008 Express. Все работает. Вам нужно указать имя базы данных в строке подключения, которая используется EF для автоматического создания базы данных с этим именем, если у вас есть этот код типа в global.asax,

System.Data.Entity.Database.SetInitializer(new CreateDatabaseIfNotExists<SchoolContext>());

Вот моя строка подключения,

<add name="SchoolContext" connectionString="Data Source=.\SQlEXPRESS;Initial Catalog=SchoolDatabase;Integrated Security=True;Pooling=False"  providerName="System.Data.SqlClient" />

Убедитесь,

Сборка приложения перед использованием.

Попробуйте запустить приложение от имени администратора.

Вам не нужно изначально создавать SchoolContext, мастер автоматически подойдет вам.

Простой способ найти строку подключения - использовать обозреватель сервера.

2 голосов
/ 27 декабря 2011

Это оказалось простой ошибкой в ​​файлах шаблонов MVC List.tt, Edit.tt, Details.tt и т. Д. Была неоднозначная ссылка на ColumnAttribute.

Я открыл C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\ItemTemplates\CSharp\Web\MVC 4\CodeTemplates\AddView\CSHTML, просматривал каждый из файлов .tt и искал "ColumnAttribute" (с пробелом в начале):

//...
var column = attribute as ColumnAttribute;
if (column != null && column.IsPrimaryKey) {  // LINQ to SQL
    return true;
}
//...

Я изменил эту первую строку на:

var column = attribute as <b>System.Data.Linq.Mapping.</b>ColumnAttribute;

Я думаю, что только у Empty.tt этого не было. Я сделал то же самое для шаблонов VB. Теперь контроллеры созданы нормально.

...