>我有一个SQL数据库,其中有一个由几列组成的表,其中"user_id"列设置为PK和身份。
这是表的代码:
CREATE TABLE [dbo].[Users] (
[user_id] INT IDENTITY (1, 1) NOT NULL,
[firstname] NVARCHAR (25) NOT NULL,
[lastname] NVARCHAR (25) NOT NULL,
[title] NVARCHAR (10) NOT NULL,
[email] NVARCHAR (50) NOT NULL,
[password] NVARCHAR (255) NOT NULL,
CONSTRAINT [PK_Users] PRIMARY KEY CLUSTERED ([user_id] ASC)
);
尝试在数据库中保存新对象时,会产生错误
SqlException: Cannot insert explicit value for identity column in table
'Users' when IDENTITY_INSERT is set to OFF.
正在保存的对象没有被赋予"user_id"。
"user_id"的 DBContext 是:
entity.Property(e => e.UserId).HasColumnName("user_id");
并已由EFCorePowerTools自动生成。
实际的用户类具有属性"UserID",该属性绑定到 DBContext 中的"user_id"。
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity), Key]
public int UserId { get; set; }
这个想法是让 SQL 数据库处理密钥生成。
通过查询手动插入非常有效,因此问题必须出在 EF 实现中。
到目前为止,我已经尝试过:
使"用户">中的"用户 ID"为空,
只有'[DatabaseGenerated Attribute(DatabaseGenerated Option.Identity(]作为'UserID'的注释
重新制作数据库,然后重新制作DBContext
出于某种原因,即使"用户"中的"UserID"用[NotMapped]注释,我也会收到同样的错误,这让我相信实际的DBContext绑定存在问题。
以下是"用户"的完整DBContext:
modelBuilder.Entity<User>(entity =>
{
entity.Property(e => e.UserId).HasColumnName("user_id");
entity.Property(e => e.Email)
.IsRequired()
.HasColumnName("email")
.HasMaxLength(50);
entity.Property(e => e.Firstname)
.IsRequired()
.HasColumnName("firstname")
.HasMaxLength(25);
entity.Property(e => e.Lastname)
.IsRequired()
.HasColumnName("lastname")
.HasMaxLength(25);
entity.Property(e => e.Password)
.IsRequired()
.HasColumnName("password")
.HasMaxLength(255);
entity.Property(e => e.Title)
.IsRequired()
.HasColumnName("title")
.HasMaxLength(10);
});
以及所有"用户"类:
public partial class User : DomainAppBase, IStorable
{
public User()
{
Leads = new HashSet<Lead>();
}
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int UserId { get; set; }
public string Firstname { get; set; }
public string Lastname { get; set; }
public string Title { get; set; }
public string Email { get; set; }
public string Password { get; set; }
public override void SetDefaultValues()
{
UserId = NullKey;
}
[NotMapped]
public ICollection<Lead> Leads { get; set; }
[NotMapped]
public new int Key => UserId;
}
任何帮助或指示将不胜感激。提前谢谢。
请将模型生成器更新为
modelBuilder.Entity<User>(entity =>
{
entity.HasKey(o => o.UserId );
entity.Property(e => e.UserId).ValueGeneratedOnAdd().HasColumnName("user_id")
...................
ValueGeneratedOnAdd
可以在添加新实体时生成值。