除了没有定义键之外,什么可能导致实体类型没有键定义错误?

时间:2016-10-27 09:43:42

标签: c# entity-framework

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

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
  4. 等...

    但是,我没有和这些问题一样的问题。他们遇到的问题是他们未能在模型中识别出主键,我没有。见下文:

    型号:

    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; }
    
        }
    }
    

    的DbContext:

    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. 添加[Key]
    3. 仔细检查DbSet和DBContext
    4. 然而,EF正在清楚地识别错误消息本身所指出的这个模型;如果不是,则不会在错误中显示模型名称。

      我唯一想知道的是,他可以定义或者有一个uint id与它有关吗?虽然它不在课堂上,所以我不知道怎么做。谢谢。我使用EF 6.1.3。

1 个答案:

答案 0 :(得分:1)

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

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

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

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