无法使用Entity Framework正确创建控制器

时间:2013-04-14 19:00:30

标签: c# asp.net-mvc entity-framework poco

所以这是一个快速概述。我正在使用Code First,新数据库。

Overview

正如您将看到的,我创建了一个AccountModels模型(默认情况下名称相同,以防任何人感到困惑)。它看起来如下:

public class User
{
    public int UserId { get; set; }
    public string Username { get; set; }
    public string Password { get; set; }
    public string Email { get; set; }
    public virtual ICollection<Stat> Stats { get; set; }
}

public class Stat
{
    public int StatId { get; set; }
    public string Age { get; set; }
    public string Height { get; set; }
    public string Weight { get; set; }
    public bool Sex { get; set; }

    public int UserId { get; set; }
    public virtual User User { get; set; }
}

public class BodylogDbContext : DbContext
{
    public DbSet<User> Users { get; set; }
    public DbSet<Stat> Stats { get; set; }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        Database.SetInitializer<BodylogDbContext>(null);
        modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
    }
}

现在,当我尝试添加Controller时,我无法选择我的模型类AccountModel。我记得,我应该能够选择模型类,然后在下一个字段中我选择我的数据上下文类--BodylogDbContext(Bodylog.Models),并且应该设置所有内容。但我不能,为什么?

Create controller

这是我的连接字符串。

   <add name="BodylogDbContext"
   connectionString="Data Source=(LocalDB)\v11.0;AttachDbFilename=|DataDirectory|\Bodylog.mdf;Integrated Security=True"
   providerName="System.Data.SqlClient"
/>

2 个答案:

答案 0 :(得分:0)

这里的一切都按预期工作。这里的一个问题是在示例项目中,提供了一个名为AccountModels.cs的文件,其中包含多个模型类。惯例规定,这些实际上被拆分成多个文件,每个类一个文件,并以类命名。

项目中没有名为AccountModels的类,这就是为什么它不作为模型的选项呈现的原因。

答案 1 :(得分:0)

拥有.cs文件不会创建“隐含”类。您只会在下拉列表中看到具有具体定义的类型。所以,如果你想拥有一个AccountModel的父类(所有其他POCO定义该模型的属性),你需要这样的东西:

public class AccountModel
{
    public User UserModel { get; set; }
    public Stat StatModel { get; set; }
}

因此,您的Razor模型绑定看起来类似于:

@model Your.Fully.Qualified.Namespace.AccountModel

您将绑定到模型的用户属性,如下所示:

@Html.EditorFor(m => m.UserModel.Email)