【问题标题】:Cannot insert explicit value for identity column in table ef6 db first无法首先在表 ef6 db 中插入标识列的显式值
【发布时间】: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


【解决方案1】:

在 ID 列上使用 [DatabaseGenerated(DatabaseGeneratedOption.Identity)] 时,它应该会插入没有该错误的行。接下来要检查的是,您的 Qualification 表中的标识列实际上称为“Id”,而不是“QualificationId”之类的名称。 (检查列的名称,该列实际上是表中设置为“Identity”的列)

还要检查在添加该属性并运行之后,您是否已经重建了整个解决方案(如果您的项目结构没有使用直接依赖项,而是使用松散耦合的 Web 服务),并且您仍然收到的任何异常都是身份资格表上的相关问题,而不是 不同 例外。 (那个让我在一段时间内遇到相同的异常并尝试不同的方法来修复它之后,我正在追逐一个已修复的原始问题,现在它是其他东西在同一个地方导致异常,但不同的消息。)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-04-13
    • 2015-10-27
    • 2018-12-12
    • 1970-01-01
    • 1970-01-01
    • 2020-11-22
    相关资源
    最近更新 更多