使用复合键时:当 IDENTITY_INSERT 设置为 OFF 时,无法在 table '' 中为标识列插入显式值

When using composite key: Cannot insert explicit value for identity column in table '' when IDENTITY_INSERT is set to OFF

我的模型如下所示:

public class AliveCheckedRealestate
{
    [DatabaseGenerated(DatabaseGeneratedOption.None)]
    [Key, Column(Order = 0)]
    public int RealestateId { get; set; }

    [Key, Column(Order = 1)]
    [ForeignKey("Job")]
    public int JobId { get; set; }


    public virtual AliveCheckJob Job { get; set; }
}

每当我向上下文中添加一个新的 AliveCheckedRealestate 时,我都会执行以下操作:

job.AliveCheckedRealestates.Add(new AliveCheckedRealestate(){RealestateId = 33});

(作业是数据库中预先存在的作业)

但是,每次我尝试保存更改(即新的 AliveCheckedRealestate)时,都会出现以下异常:

Cannot insert explicit value for identity column in table 'AliveCheckedRealestates' when IDENTITY_INSERT is set to OFF.

这可能是什么问题? RealestateId 是我手动设置的唯一整数(它不是外键)并且我确实设置了它。

您将必须针对 table 执行以下 sql 命令:

设置IDENTITY_INSERTTable_Name开启;

我不知道有什么内置方法可以告诉 EF 设置标识插入,据我所知,唯一的方法是使用 SQL。

注意: 这不是一个好的做法,根本不建议这样做。您很可能最终会得到重复的值,因此让标识列为您生成值。如果您希望能够自己插入值,那么根本不要将其设为标识列。

在您的 entityframework 的上下文 class 中有一个名为 ValueGeneratedNever 的选项设置在身份上,删除它并使用

entity.HasKey(e => e.Id);
entity.ToTable("NameofYourtable");

// 也使用

yourContext.Database.ExecuteSqlCommand("SET IDENTITY_INSERT dbo.YourTableName ON");
yourContext.SaveChanges();
yourContext.YourTableFromDB.Add(YourParameterCommingin);
yourContext.SaveChanges();`

如果有帮助请告诉我