![](/img/trans.png)
[英]Auto-increment on partial primary key with Entity Framework Core
[英]Auto increment primary key with 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)
);
在这里,我尝试通过 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();
}
但我得到例外:
违反主键约束“PK__tmp_ms_x__1788CCACDB8355D2”。 无法在 object 'dbo.UserMaster' 中插入重复密钥。 重复键值为 (0)。 该语句已终止。
要在数据库级别进行自动增量,您应该在 DDL 中包含IDENTITY
: UserID int identity(1,1) not null
(1,1)
代表UserID
将从1
开始,并为每个INSERT
递增 1。
将[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; }
}
当您基于该 model 创建迁移和表时,EF 创建具有自动增量的标识字段。
Entity Framework 不知道你的整个数据库,它只知道你已经提取到它的上下文中的记录。 因此它无法确定给定表中使用的最大 id。
您在这里有 3 个选项:
使用你的数据库的一个特性来自动设置 id,一个自动递增的标识列
或者
在您的数据库中编写一个 function 返回最大 id 并在 EF 中自行设置
或者
在您的 EF 中获取整个表(完全加载),然后 select 获取最大 ID。
我强烈建议不要使用选项 2 和 3,建议选项 1 使用数据库的自动增量功能。 您应该通过 EF 插入它们,id 为null
,DB 将设置 id。 您需要相应地标记该列。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.