2011-12-27 62 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