3

我是 ASP.net MVC 的新手。我正在尝试创建一个视图模型来显示数据的连接。这是一些示例代码:

   public class Person
{
    [Key]
    public int ID { get; set; }
    public string Name { get; set; }

    public ICollection<Relative> Relatives { get; set; }

}

public class Relative
{
    [Key]
    public int ID {get; set; }
    public Person Person { get; set; }
    public RelationType RelationType { get; set; }
}

public class RelationType
{
    [Key]
    public int ID { get; set; }
    public string Description { get; set; }
}

public class PersonViewModel
{
    public string Name { get; set; }
    public ICollection<string> RelativeNames { get; set; }
    public ICollection<string> RelativeTypes { get; set; }
}

public class PersonContext : DbContext
{
    public DbSet<PersonViewModel> people { get; set; }
}

当我尝试通过 Visual Studio 创建控制器时,出现以下错误:

无法检索 PersonViewModel 的元数据。在生成过程中检测到一个或多个验证错误:EntityType 'PersonViewModel' 没有定义键。定义此 EntityType 的键。

4

2 回答 2

3

该错误是不言自明的。您需要向 PersonViewModel 添加一个 Id 字段,该字段必须用 [Key] 进行装饰,正如您在上面的类中所做的那样。

于 2012-08-13T00:01:34.193 回答
1

视图模型是用于在控制器和视图之间传递数据的便捷类。您收到此异常的原因是因为您将 PersonViewModel 类传递到您的 dbSet。除非 PersonViewModel 类有相应的表,否则您不能这样做。在这种情况下,PersonViewModel 不应该是一个视图模型,而应该是一个实体,一个模型类来代表你的表。

通过查看您的代码,我猜您的数据库中有 Person 和 Relative 表,因此您应该执行以下操作

public class PersonContext : DbContext
{
    public DbSet<Person> Person { get; set; }
    public DbSet<Relative> Relative { get; set; }

}

并通过 DbContext 类的 Person 和 Relative 属性填充 PersonViewModel。这可以在控制器内部完成,如果有的话,可以在存储库类中完成。

于 2012-08-13T00:02:19.313 回答