【问题标题】:Cannot generate Id using Data annotation (EF6)无法使用数据注释 (EF6) 生成 Id
【发布时间】:2020-01-28 02:53:04
【问题描述】:

我是 EF6 和 Asp.net MVC5 的新手。 当我尝试使用代码优先方法创建实体时,会自动生成唯一 ID。

考虑这样一个实体:

        [Key]
        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        public int PostId { get; set; }
        [Required]
        [MaxLength(100), MinLength(5)]
        public string Title { get; set; }
        public string Content { get; set; }
        public string Thumbnail { get; set; }
        public string Description { get; set; }
        public DateTime DateCreated { get; set; }

当我将 [DatabaseGenerated(DatabaseGeneratedOption.Identity)] 放在 PostId 上甚至删除它时。我总是收到这样的异常错误:

“无法将值 NULL 插入‘PostId’列”。 “列不允许空值。插入失败。

我不知道为什么 EF6 总是尝试在 Id 列中插入一个空值。

后来,我找到了解决办法。 我变了

DatabaseGeneratedOption.IdentityDatabaseGeneratedOption.None

问题就解决了。

但是,这个解决方案似乎不像我预期的那样工作。 插入列的值始终相同。这不是唯一的。

有了 EF 核心,一切都变得简单了,我不需要DatabaseGenerated,只需按照约定。但是对于 EF6,我被卡住了。我想要的是 Id 字段必须是唯一的,并且每次插入数据库时​​都会增加。

有人可以帮我吗?

【问题讨论】:

    标签: asp.net asp.net-mvc entity-framework asp.net-mvc-5 entity-framework-6


    【解决方案1】:

    我也是 EF 新手,但我只是创建了一个 Id 字段,它由 SQL Server 自动插入,例如我当前项目中的这个模型。当我添加新行时,Id 字段会按预期填充:

    public class BlogPosts
    {
        public int Id { get; set; }
        [Required]
        public string Title { get; set; }
        [Required]
        public string ShortPost { get; set; }
        [Required]
        public string Post { get; set; }
        [Required]
        public string Tags { get; set; }
        [Required]
        public DateTime Updated { get; set; }
    }
    

    【讨论】:

    • 您使用的是什么版本的 EF? EF6 还是 EF 核心?我已经用 EF6 尝试过,但仍然出现错误。
    • 我使用的是 6.2 版
    【解决方案2】:

    当您将DatabaseGeneratedOption.Identity 应用于您的密钥属性时,您是在告诉 EF 数据库将生成身份。从错误来看,您的数据库 PostId 列未配置为身份或主键。

    如果您在数据库中手动创建表和列,您应该确保配置至少兼容,或者您​​应该使用迁移来确保数据库配置为适合您的 EF 模型的良好状态。

    【讨论】:

      猜你喜欢
      • 2023-03-12
      • 1970-01-01
      • 2015-08-08
      • 1970-01-01
      • 1970-01-01
      • 2014-02-14
      • 1970-01-01
      • 2016-01-03
      • 2015-11-18
      相关资源
      最近更新 更多