所以这是一个快速概述。我正在使用Code First,新数据库。
正如您将看到的,我创建了一个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),并且应该设置所有内容。但我不能,为什么?
这是我的连接字符串。
<add name="BodylogDbContext"
connectionString="Data Source=(LocalDB)\v11.0;AttachDbFilename=|DataDirectory|\Bodylog.mdf;Integrated Security=True"
providerName="System.Data.SqlClient"
/>
答案 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)