在使用EF Core 3时,我具有以下要求。我有(Id = 1俯卧撑),(Id = 2下蹲),(Id = 3举重)和用户的练习。一旦一项练习完成,就将创建一个或多个新的练习。可以使用n级来创建多级层次结构。 我有一个问题,尽管这可能会导致对练习的周期性依赖。 例如,俯卧撑(1)已完成。下蹲(2)已创建。下蹲(2)完成,然后创建举重(3)。还有一个对举重(3)的依赖关系,一旦完成,它就会创建Pushup(1)并导致循环依赖关系,我需要避免这种情况。 我举了一个非常简单的例子。在我的项目中,依赖项可以上升到50级,我不知道如何检查循环引用并避免使用它们。 下面是代码:
public class Exercise
{
public Exercise()
{
ExerciseDependencyExercises = new HashSet<ExercisesDependency>();
ExerciseDependencyTargetExercises = new HashSet<ExercisesDependency>();
UserExercises = new HashSet<UserExercise>();
}
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public long Id { get; set; }
[Required]
public string Name { get; set; }
public virtual ICollection<ExercisesDependency> ExerciseDependencyExercises { get; set; }
public virtual ICollection<ExercisesDependency> ExerciseDependencyTargetExercises { get; set; }
public virtual ICollection<UserExercise> UserExercises { get; set; }
}
public class UserExercise
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public long Id { get; set; }
public long UserId { get; set; }
public long ExerciseId { get; set; }
}
public class ExercisesDependency
{
public long ExerciseId { get; set; }
public virtual Exercise Exercise { get; set; }
public long TargetExerciseId { get; set; }
public virtual Exercise TargetExercise { get; set; }
}
答案 0 :(得分:0)
我能想到的最简单的解决方案是不让您的要求来指定主键值(应仅将其用于唯一地标识记录)。
我不知道/不明白您为什么有此要求。但我建议您继续编号,并在创建新记录时计算它应该是1、2还是3类型的练习。 1 => 1、2 => 2、3 => 3、4 => 1、5 => 2、6 => 3、7 => 1。
然后是一个简单的变量:var type =((id-1)%3)+ 1;返回该数字列表。