我有一个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)
);
尝试在DB中保存新对象时,会产生错误
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 DB处理密钥生成。
通过查询手动插入工作完美,因此问题必须在于EF实现。
到目前为止,我已经尝试过了:
使'User'中的'UserID'可以为空,
只有'[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]作为'UserID'的注释
重新构建数据库,然后重新构建DBContext
出于某种原因,即使用'NotMapped'注释'User'中的'UserID',我也会得到同样的错误,这让我相信实际的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;
}
任何帮助或指示都将非常感激。提前谢谢。
答案 0 :(得分:0)
请将模型构建器更新为
modelBuilder.Entity<User>(entity =>
{
entity.HasKey(o => o.UserId );
entity.Property(e => e.UserId).ValueGeneratedOnAdd().HasColumnName("user_id")
...................
ValueGeneratedOnAdd
可以在添加新实体时生成值。