我尝试关注Contoso University tutorial,仅使用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:
此对话框被抛出五次(我假设每个生成的模板文件一次),我最终得到一个控制器,但没有生成模板。
我怀疑它与我的连接字符串或我的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>();
}
}
我的连接字符串错了吗?这是服务器未正确配置的症状吗?我搞砸了什么?
答案 0 :(得分: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模板做了同样的事情。现在控制器创建得很好。
答案 1 :(得分:2)
我刚刚使用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,向导会自动为您创建一个。
查找连接字符串的一种简单方法是使用服务器资源管理器。