我正在尝试克隆 EF Core 中的实体。据我了解,我需要检索它们 AsNoTracking 然后重新添加它们,但是当我这样做时,我收到错误:
Cannot insert explicit value for identity column in Exercises when IDENTITY_INSERT is set to OFF;
我向 Id 添加了数据注释:[DatabaseGenerate(DatabaseGenerateOption.Identity)]
,但仍然遇到相同的错误。
这是我的代码:
public class Exercise : Entity
{
public Exercise()
{
Sets = new HashSet<Set>();
}
public DateTime Date { get; set; }
public int MuscleGroupId {get;set;}
public int MesoId { get; set; }
public ICollection<Set> Sets { get; set; }
public void AddSet(Set set)
{
Sets.Add(set);
}
}
这是我的实体代码,我设置了一个注释,告诉 EF Core ID 是数据库生成的:
public class Entity
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
}
这是克隆实体的代码:
var exercises = _context.Exercises.AsNoTracking().Include(y => y.Sets)
.Where(x => x.MesoId == mesoId && x.Date == fromDate);
foreach (var exercise in exercises)
{
exercise.Date = toDate;
_context.Exercises.Add(exercise);
}
await _context.SaveChangesAsync();
最佳答案
您无法将值存储到数据库的 Identity 列中,因为该值由数据库本身管理。
“克隆”锻炼记录时,您需要设置 Id=0
,以便在插入新行时数据库将为它创建 Identity 值,例如:
foreach (var exercise in exercises)
{
exercise.Date = toDate;
exercise.Id = 0; //<<--This is important!
_context.Exercises.Add(exercise);
}
await _context.SaveChangesAsync();
关于c# - 当 IDENTITY_INSERT 设置为 OFF 时,无法在 TABLE 中插入标识列的显式值; .NET核心2.1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57838277/