我是新来的MVC以及实体框架。 我搜索很多,发现几个类似的问题(如实体类型没有密钥定义 ),但他们不解决我的问题。
namespace MvcAppInvoice.Models
{
public class Customer
{
public int CustomerID { get; set; }
public string FirstName { get; set; }
public string SurName { get; set; }
public virtual CustomerType Type { get; set; }
}
public class CustomerType
{
public int TypeId { get; set; }
public string TypeName { get; set; }
public virtual ICollection<Customer> customers { get; set; }
}
}
当我尝试添加控制器它提供了以下错误:
通常情况下,代码首先按照惯例隐含设置,如果财产被命名为实体类型键Id
或TypeName+Id
。 在你的情况, TypeId
既不是他们的,所以你应该明确地将其标记为关键,使用KeyAttribute使用或用流利的语法, EntityTypeConfiguration.HasKey方法
我有同样的问题。 我重新启动该项目的3倍之前,我发现我工作的解决方案。 我有我手动创建了名为的UserContext一个公共类。 当我跑的向导添加ADO类向导生成的局部类的UserContext的。 我删除了我的UserContext类,我修改了VS对我来说生成的类。
namespace UserLayer.Models
{
using System;
using System.Data.Entity;
using System.Data.Entity.Infrastructure;
public class UserContext : DbContext
{
public DbSet<UserDetail> UserDetails { get; set; }
}
}
现在,它可能已经没有修改的工作。 也许删除我的类版本将有工作。 我不知道。 在retropect我遇到你的错误,当我试图添加控制器。 我怀疑这是在VS2012中的错误,因为部分类和公共类同名的可能存在。 其目的是允许程序员扩展的部分类的定义。
添加命名空间
using System.ComponentModel.DataAnnotations;
添加键属性到你的客户ID喜欢这个
[Key]
public int CustomerID { get; set; }
然后构建应用程序,并尝试添加控制器。 这将工作
有运行所选择的码发生器无法检索实体类型的元数据不具有确定的关键错误。
- 一个更重要的SQL表只需要[ID]然后,如果你使用像惯于[菜单ID]其他主键的实体框架将正常工作。
- 你应该对模型添加验证这是关键,列顺序
- 列顺序= 1,因为后1键]增加了它的增量,这就是为什么
模型
[Key]
[Column(Order = 1)]
public int RoleIdName { get; set; }
那么建立这个创造条件,实体框架控制器工作后,将工作
我希望它能帮助。