Asp.net 无法使用数据批注(EF6)生成Id
我是EF6和Asp.NETMVC5的新手。 当我尝试使用代码优先方法创建实体时,会出现自动生成唯一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
[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
toDatabaseGeneratedOption.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.