无法首先使用 EF Core 代码将 "subclass" 对象插入数据库

Cannot insert "subclass" object into database using EF Core code first

我有两个类:

Workout.cs:

public class Workout
        {
            public int Id { get; set; }
    
            public string Name { get; set; }
    
            public ICollection<WorkoutSet> Sets { get; set; }
    
            public DateTimeOffset FromDateTime { get; set; }
            
            public DateTimeOffset ToDateTime { get; set; }
        }

我有子类

WorkoutSet.cs
    
public class WorkoutSet
        {
            public int Id { get; set; }
    
            public int WorkoutId { get; set; }
            
            public Workout Workout { get; set; }
    
            public int OrderNumber { get; set; }
    
            public int Type { get; set; }
    
            public int Duration { get; set; }
        }

此设置使 WorkoutSet 具有指向 Workout 的外键。这很好,但我在将数据插入数据库时​​遇到问题。我正在尝试使用以下代码插入带有新锻炼集的新锻炼(如锻炼的定义):

using (IDbContextTransaction transaction = await _dbContext.Database.BeginTransactionAsync())
                {
                    try
                    {
                        await _dbContext.Workouts.AddAsync(data);
                        await _dbContext.SaveChangesAsync();
                        await _dbContext.WorkoutSets.AddRangeAsync(data.Sets);
                        await _dbContext.SaveChangesAsync();
                        await transaction.CommitAsync();
                        return data;
                    }
                    catch (Exception e)
                    {
                        await transaction.RollbackAsync();
                        throw new Exception("Cannot create workout");
                    }
                }

当我调试应用程序时,我看到为锻炼创建了正确的 ID,我看到为每个锻炼集创建了正确的新生成的 ID,但是在锻炼集之后,当我调用 savechangesasync 时,我收到错误:

Microsoft.Data.SqlClient.SqlException (0x80131904): Cannot insert explicit value for identity column in table 'WorkoutSets' when IDENTITY_INSERT is set to OFF.

我的数据库上下文如下所示:

public class TrainingDbContext : DbContext
    {
        public TrainingDbContext(DbContextOptions<TrainingDbContext> options) : base (options)
        {
        }

        public DbSet<Workout> Workouts { get; set; }

        public DbSet<WorkoutSet> WorkoutSets { get; set; }
    }

我正在研究在网上找到的不同解决方案,例如将这样的属性添加到 ID 中:

[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
[Key]

或重写 WorkoutSet 实体的 OnModelCreating 但没有成功。我找到的每个解决方案都无法解决我的问题。我知道问题出在 EF Core 中,但我不是 100% 确定如何解决它。

Microsoft.Data.SqlClient.SqlException (0x80131904): Cannot insert explicit value for identity column in table 'WorkoutSets' when IDENTITY_INSERT is set to OFF.

您似乎正在为身份列 Id 插入值。

WorkoutWorkoutSet中的Id属性可以尽量不赋值,使其自增