数据库中的自动编号ID

时间:2019-04-11 05:11:43

标签: c# entity-framework auto-increment

将数据插入数据库时​​该怎么办,“ ID”列为自动编号。 我尝试过:

[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int IdMema { get; set; }
public string Autor { get; set; }
public int? Like { get; set; }
public int? Dislike { get; set; }

“ Memy”属性表:

CREATE TABLE [dbo].[Memy] (
    [Id_mema] INT  NOT NULL IDENTITY,
    [autor]   TEXT NULL,
    [like]    INT  NULL,
    [dislike] INT  NULL,
    PRIMARY KEY CLUSTERED ([Id_mema] ASC)
);

当我尝试插入数据时,我看到:

  

“ SqlException:无法在中为标识列插入显式值   IDENTITY_INSERT设置为OFF时,表'Memy'。”

如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

您具有自动递增字段Id_mema。使用IDENTITY关键字设置自动增量。异常说明了这一点:

  

SqlException:无法为身份列插入显式值   IDENTITY_INSERT设置为OFF时,表'Memy'。

当您向表中插入数据时,不能为标识字段赋予值。数据库引擎为Id_mema字段赋值(自动递增0、1、2、3 ..)

以下操作应该有效(直接sql):

INSERT INTO MEMY(autor, like, dislike) values ('text',1,0)

,如果使用实体框架,请确保不要在代码中设置Id_mema

答案 1 :(得分:0)

要插入如下所示的值时,您无需传递Id_mema值。

INSERT INTO MEMY values ('kamilm',10,5);

OR

如果您不想自动递增列,然后将DatabaseGeneratedOption.Identity更改为DatabaseGeneratedOption.None,它将允许您在Id(Key)列中插入值。

 [Key]
 [DatabaseGenerated(DatabaseGeneratedOption.None)]
 public int IdMema { get; set; }
 public string Autor { get; set; }
 public int? Like { get; set; }
 public int? Dislike { get; set; }