【问题标题】:What can cause an Entity Type has no key defined error besides having no key defined? [duplicate]除了没有定义键之外,还有什么会导致实体类型没有键定义错误? [复制]
【发布时间】:2016-10-27 19:43:16
【问题描述】:

我已经对我遇到的这个错误进行了广泛的研究:

EntityType 'Todo' has no key defined. Define the key for this EntityType.

在这里和其他网站上:

  1. EntityType has no key defined error
  2. https://gilesey.wordpress.com/tag/entitytype-has-no-key-defined/
  3. Entity type has no key defined EF6

等等……

但是,我没有遇到与这些提问者相同的问题。他们遇到的问题是他们未能识别模型中的主键,我没有。见下文:

型号:

namespace TaskMaster.Library.Models
{
    public enum Priority
    {
        Highest = 0,
        High = 1,
        Medium = 2,
        Low = 3,
        Lowest = 4
    }
    public class Todo 
    {
        [Key]
        public uint Id { get; set; }
        public ITask Task { get; set; }
        public bool isDone { get; set; }
        public bool isVisible { get; set; }

        public Priority Priority { get; set; }

    }
}

数据库上下文:

namespace TaskMaster.Library.Models
{
    class TodoContext : DbContext
    {
        public TodoContext()
            :base ("DefaultConnection")
            {
                this.Configuration.LazyLoadingEnabled = false;
            }

        public virtual DbSet<Todo> Todos { get; set; }

        }
}

我尝试过的(除了阅读文章):

  1. 将 Id 名称更改为 TodoId。
  2. 添加[键]
  3. 双重检查 DbSet 和 DBContext

但是,正如错误消息本身所指出的那样,EF 清楚地识别了此模型;如果不是,则不会在错误中显示型号名称。

我唯一的疑惑是他的枚举定义或 uint id 是否与它有关?虽然它在课堂之外,所以我不知道如何。谢谢。我正在使用 EF 6.1.3。

【问题讨论】:

标签: c# entity-framework


【解决方案1】:

实体框架不支持 uint 类型的属性(键或其他)。试试这个实验:

将您的 Todo.Id 属性更改为 int(或 long)类型。它会正常工作的。

添加一个 uint 类型的非键属性。它仍然会成功地构建您的迁移,但它会完全忽略 uint 属性,就像您已明确排除它一样。

Support unisgned integer 建议添加对 uint 的支持,EF 团队表示将在 EF7 中支持。

【讨论】:

  • 哇,绝对应该支持,我以前从来没有用过否定的ID。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-08-29
  • 1970-01-01
  • 2015-01-28
  • 2015-12-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多