【发布时间】:2021-08-21 21:53:06
【问题描述】:
在使用 c# + 实体框架 6(数据库优先) + sql server 创建应用程序时,我遇到了下一个问题:
当 IDENTITY_INSERT 设置为 OFF 时,无法为表“Qualification”中的标识列插入显式值。
我尝试用谷歌搜索我的问题,最流行的答案就是为模型添加属性
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
但这无济于事。 然后我决定运行 SQL 命令“SET IDENTITY_INSERT dbo.Qualification ON”,但它也没有帮助。 在我的数据库中(我使用管理工作室)身份规范(是身份)设置为 TRUE
有我的.NET 生成的实体:
public partial class Qualification
{
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
public Qualification()
{
this.Trainer = new HashSet<Trainer>();
}
[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
public string Name { get; set; }
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
public virtual ICollection<Trainer> Trainer { get; set; }
}
还有我的上下文类:
public partial class SportClubContext : DbContext
{
public SportClubContext()
: base("name=SportClubContext")
{
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
throw new UnintentionalCodeFirstException();
}
public virtual DbSet<sysdiagrams> sysdiagrams { get; set; }
public virtual DbSet<Client> Client { get; set; }
public virtual DbSet<Group> Group { get; set; }
public virtual DbSet<Qualification> Qualification { get; set; }
public virtual DbSet<Schedule> Schedule { get; set; }
public virtual DbSet<Trainer> Trainer { get; set; }
public virtual DbSet<Training> Training { get; set; }
}
以及我如何尝试将新记录添加到我的数据库:
var qualification = new Qualification
{
Name = textBox1.Text
};
context.Qualification.Add(qualification);
await context.SaveChangesAsync();
【问题讨论】:
-
我认为您尝试执行此操作的方式没有任何问题...您的错误表明您正在尝试将值插入定义为身份的字段中,但是如果您的插入代码是准确的,这是抛出错误的地方,我不知道为什么会出错。
标签: c# sql-server entity-framework entity-framework-6