使用EF Core

时间:2020-02-14 10:20:17

标签: c# .net entity-framework .net-core entity-framework-core

在使用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; }
}

1 个答案:

答案 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;返回该数字列表。

相关问题