使用实体框架自动递增主键

Plo*_*mpy 4 c# sql-server entity-framework

我有一个表,我想在其中插入项目而不指定UserID. 我希望自动生成此 ID。

CREATE TABLE [dbo].[UserMaster] 
(
    [UserID]       INT           NOT NULL ,
    [UserName]     VARCHAR (50)  NULL,
    [UserPassword] VARCHAR (50)  NULL,
    [UserRoles]    VARCHAR (500) NULL,
    [UserEmailID]  VARCHAR (100) NULL,

    PRIMARY KEY CLUSTERED ([UserID] ASC)
);
Run Code Online (Sandbox Code Playgroud)

这里我尝试通过 C# 插入行:

using (LessonesDBEntities context = new LessonesDBEntities())
{
    var u = new UserMaster//Make sure you have a table called UserMaster in DB
    {
        UserName = "test username",
        UserPassword = "test password",
        UserEmailID = "test email",
        UserRoles = "User"
    };

    context.UserMaster.Add(u);
    context.SaveChanges();
}
Run Code Online (Sandbox Code Playgroud)

但我得到例外:

违反主键约束“PK__tmp_ms_x__1788CCACDB8355D2”。无法在对象“dbo.UserMaster”中插入重复的键。重复的键值为 (0)。该语句已终止。

Ris*_*o M 6

将属性添加[DatabaseGenerated(DatabaseGeneratedOption.Identity)]到您的身份字段UserId

public class UserMaster
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int UserId { get; set; }
    public string UserName { get; set; }
    public string UserPassword { get; set; }

    public string UserEmailID { get; set; }
    public string UserRoles { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

当您基于该模型创建迁移和表时,EF 将创建具有自动增量的标识字段。

  • **并且** SQL Server 表必须对“UserId”列使用“INT IDENTITY(1,1)” - 仅此一点是行不通的 (2认同)