簡體   English   中英

嘗試創建ASP.NET MVC 4控制器時出現FileNotFound異常

[英]FileNotFound exception while trying to create ASP.NET MVC 4 controller

我正在嘗試遵循Contoso大學教程 ,僅使用SQL Server 2008而不是CE。 我可以使用我的PC名稱和Windows身份驗證連接到SQL Server Management Studio中的數據庫引擎。 我沒有用它創建數據庫,因為我正在嘗試使用EF Code First。

這是我的連接字符串:

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

我嘗試通過右鍵單擊controllers文件夾並選擇Add->Controller...並根據教程設置生成的對話框來添加控制器。 我結束了一個對話框,告訴我拋出了FileNotFoundException ,該文件是一個臨時的dll:

編譯轉換代碼時出現FileNotFoundException

這個對話框被拋出五次(我假設每個生成的模板文件一次),我最終得到一個控制器,但沒有生成模板。

我懷疑它與我的連接字符串或我的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>();
    }
}

我的連接字符串錯了嗎? 這是服務器未正確配置的症狀嗎? 我搞砸了什么?

事實證明,這是在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 System.Data.Linq.Mapping.ColumnAttribute;

我認為只有Empty.tt沒有它。 我為VB模板做了同樣的事情。 現在控制器創建得很好。

我剛剛使用ASP.NET MVC 4,SQL SERVER 2008 Express對此進行了測試。 每件事都有效。 您需要在連接字符串中提供數據庫名稱,如果您在global.asax中有此類型代碼,則EF使用該字符串自動創建具有此名稱的數據庫,

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,向導會自動為您創建一個。

查找連接字符串的一種簡單方法是使用服務器資源管理器。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM