当前位置:Gxlcms > 数据库问题 > 如何使EF Core不插入MySql中自增长的主键(踩坑实录)

如何使EF Core不插入MySql中自增长的主键(踩坑实录)

时间:2021-07-01 10:21:17 帮助过:60人阅读

partial class File { public int Id { get; set; } public string FileName { get; set; } public string FileType { get; set; } public string FileSize { get; set; } public string FilePath { get; set; } public string ProId { get; set; } public string CreateUser { get; set; } public string CreateUserName { get; set; } public DateTime CreateTime { get; set; } public int IsDel { get; set; } }

可以看到,该表的Id是Int型,也就是自增长的主键,而如果我们直接使用的话,那么在你不对主键赋值的情况下,第一次肯定是插入0,第二次就直接报错了,会提示你主键重复。

也就是Id并没有自增,EF Core直接给主键赋值为0,并执行插入。那么怎么才能告诉EF Core我这张表的Id是自增的呢?

经过百度,查到的答案是加特性,如下:

[DatabaseGenerated(DatabaseGeneratedOption.Identity)]

或者

[DatabaseGenerated(DatabaseGeneratedOption.Computed)]

告诉EF Core它是自增的,你不要管我啦。然后你以为这样结束了?不好意思,一样报错,哈哈。正确答案是:

public partial class File
    {
        [DatabaseGenerated(DatabaseGeneratedOption.None)]
        public int Id { get; set; }
    }

没错应该使用“DatabaseGeneratedOption.None”的特性,官方注释是“The database does not generate values”。

虽然不知道为啥这个最不靠谱的却是正确的,但事实如此。加上这个特性后,插入时不用对Id做任何操作,直接会自增长,多少条都能保存成功

我也是把三个类型试了遍才发现的,写下来给大家提个醒,可以少走点弯路。

如何使EF Core不插入MySql中自增长的主键(踩坑实录)

标签:命令   项目   报错   path   开发   com   插入   哈哈   部署   

人气教程排行