2011-12-27 61 views
3

我試圖按照Contoso University tutorial,僅與SQL Server 2008,而不是CE。我可以使用我的PC的名稱和Windows身份驗證連接到SQL Server Management Studio中的數據庫引擎。我還沒有創建數據庫,因爲我試圖使用EF Code First。FileNotFound異常試圖創建ASP.NET MVC 4控制器

這是我的連接字符串:

<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

此對話框拋出了5次(一次爲每個生成的模板文件,我假設)我結束了一個控制器,但沒有生成模板。

我懷疑這是用我的任何連接字符串或我的SQL Server安裝做,因爲我一直停留在這一段時間,在這個階段獲得的各種錯誤,我嘗試並獲得連接字符串的權利。

爲了完整起見,這裏是我想要生成控制器型號:

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

事實證明,這是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模板做了同樣的事情。現在控制器創建好了。

2

我剛纔跟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,嚮導會自動爲您創建一個。

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

+0

謝謝!但實際上連接字符串工作正常,這是一個由MVC模板中的錯誤引起的奇怪錯誤。看到我的回答 – 2011-12-27 05:03:58

+0

@CarsonMyers,當你運行這個應用程序時,你會發現一些問題。這就是爲什麼我添加了一些建議。順便說一句,很好找到並分享這個錯誤的原因。我沒有發現簡單的學生模型的任何問題。 – 2011-12-27 05:11:29

+0

感謝您的建議!我確實有一個初始化器,並且你的連接字符串是用於sql express的(我正試圖使用​​sql server 2008 professional來工作)。但它的作品!生成的數據庫顯示在SQL服務器管理器和所有 – 2011-12-27 23:33:22