[英]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.