【问题标题】:EntityType Has No Key Defined Using String as KeyEntityType 没有使用字符串作为键定义的键
【发布时间】:2015-07-02 02:37:26
【问题描述】:

我在 asp.net mvc 6 应用程序中收到“EntityType Has No Key Defined”错误。所有研究都指向在模型中定义“关键”属性,但是我在这里正确地做到了这一点,问题仍然存在:

public class InvoiceCategory
{

    [Key]
    public string Name { get; set; }
}

以上为完整的实体,没有其他列,name列为主键。

附加信息:我正在尝试实现如下选择列表:

ViewBag.Category = new SelectList(
await DbContext.InvoiceCategory.ToListAsync(),
"Name","Name", (object)invoiceItem.Category);

任何想法为什么我在这种情况下收到上述错误?

【问题讨论】:

  • 无法解释这一点,但我也不能推荐这个。拥有有意义的主键是不明智的。你再也不会改名了。
  • @Gert 这是一个简单的查找列表。它不是关系型的,甚至不需要主键,但是我将其设置为尝试解决问题,唯一的限制是列表是唯一的。

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


【解决方案1】:

也许您尝试使用 int 作为 KEY 而不是字符串。

【讨论】:

  • 我不能使用整数,因为名称列是一个字符串。它是唯一的列,我不想仅为简单的查找列表添加 int id 列。
  • 好吧,关键是 id,因为这个原因,我认为你需要使用 int 试试,你会看到是否是问题所在:)
  • 如果我在数据库中添加一个整数列,所以我有“id,name”,那么它会起作用,但这意味着我必须在我的数据库中添加一个我不想的毫无意义的列做。我只想要一个简单的字符串类型查找列表。我错过了什么吗?
  • ok :) EF 框架提示“无键”是 EF 框架需要数据库中的主键。要以声明方式告诉 EF 密钥是哪个属性,请添加 [Key] 注释。或者,最快的方法是添加一个 ID 属性。然后,EF 框架会默认将 ID 作为主键。祝你有美好的一天:)
  • 是的,我也是这么理解的,但是我不明白为什么当我将“名称”列定义为键时它不起作用。是否绝对必须有一个整数作为主键?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-04-02
  • 2016-03-16
  • 2013-08-04
  • 2012-12-10
  • 2016-09-26
  • 1970-01-01
相关资源
最近更新 更多