Asp.net 无法使用数据批注(EF6)生成Id

Asp.net 无法使用数据批注(EF6)生成Id,asp.net,asp.net-mvc,entity-framework,asp.net-mvc-5,entity-framework-6,Asp.net,Asp.net Mvc,Entity Framework,Asp.net Mvc 5,Entity Framework 6,我是EF6和Asp.NETMVC5的新手。 当我尝试使用代码优先方法创建实体时,会出现自动生成唯一ID的问题 考虑这样一个实体: [Key] [DatabaseGenerated(DatabaseGeneratedOption.Identity)] public int PostId { get; set; } [Required] [MaxLength(100), MinLength(5)] pub

我是EF6和Asp.NETMVC5的新手。 当我尝试使用代码优先方法创建实体时,会出现自动生成唯一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上,甚至把它删除。我总是遇到这样的异常错误:

        [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; }
“无法将值NULL插入列‘posted’。”。 “列不允许为空。插入失败

我不知道为什么EF6总是试图在Id列中插入空值

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

DatabaseGeneratedOption.Identity
to
DatabaseGeneratedOption.None

问题解决了

然而,这个解决方案似乎并不像我预期的那样有效。 插入到列中的值总是相同的。它不是唯一的

使用EF core,一切都很简单,我不需要
数据库生成
,只需将其保留为常规。但使用EF6,我陷入困境。我想要的是Id字段必须是唯一的,并且每次插入数据库时都会增加


有人能帮我吗?

我也是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; }
}

DatabaseGeneratedOption.Identity
应用于密钥属性时,您告诉EF数据库将生成标识。从错误中可以看出,您的数据库PostId列未配置为标识或主键


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

您使用的EF版本是什么?EF6还是EF core?我已尝试使用EF6,但仍然会出现错误。我使用的是版本62.