表“评分”上的“ FK_Ratings_Users_UserId”可能会导致循环或多个级联路径

时间:2018-09-12 14:36:36

标签: asp.net-core foreign-keys ef-migrations

我正在通过以下实体在 .NET EFCore 中进行以下 Code-First 迁移

用户

[Table("Users")]
public class User
{
    [Key]
    public int Id { get; set; }

    [Required]
    [MaxLength(100)]
    public string FirstName { get; set; }

    [Required]
    [MaxLength(100)]
    public string LastName { get; set; }

    [Required]
    [MaxLength(250)]
    public string Email { get; set; }

    [Required]
    [MinLength(8), MaxLength(16)]
    public string Password { get; set; }

    [Required]
    [MinLength(6), MaxLength(15)]
    public string Phone { get; set; }

    public ICollection<Apartment> Apartments { get; set; }

    public ICollection<Rating> Ratings { get; set; }
}

公寓

[Table("Apartments")]
public class Apartment
{
    [Key]
    public int Id { get; set; }

    [Required]
    [MinLength(24), MaxLength(100)]
    public string Title { get; set; }

    [Required]
    [MinLength(24), MaxLength(250)]
    public string Address { get; set; }

    [Required]
    public int Price { get; set; }

    [ForeignKey("User")]
    public int UserId { get; set; }

    public User User {get; set;}

    public ICollection<Rating> Ratings { get; set; }

    public ICollection<AptCateg> AptsCategs { get; set; }
}

评分

[Table("Ratings")]
public class Rating
{
    [Key]
    public int Id { get; set; }

    public int Value { get; set; }

    [ForeignKey("Apartment")]
    public int ApartmentId { get; set; }

    public Apartment Apartment { get; set; }

    [ForeignKey("User")]
    public int UserId { get; set; }

    public User User { get; set; }
}

我使用命令dotnet ef migrations add InitialDatabase,但是当我尝试使用dotnet ef database update时,会在cmd中引发以下错误,如标题

  

表“ Ratings”上的“ FK_Ratings_Users_UserId”可能会导致循环或   多个级联路径

我尝试按照here EFCore 教程中的方法添加modelBuilder的Cascade行为,但由于我遇到了相同的错误,因此它不起作用。我也尝试过从here那里得到答案,但是即使尝试安装HasRequiredEntityFrameworkCore.Tools的实现也不起作用。

我知道圆形杂物一直存在问题。从我的直觉来看,该程序不知道删除用户的情况,是否放弃其评级和公寓或类似的东西,这就是为什么它采取这种方式但我无法解决的原因问题。

我的问题是,由于无法创建数据库,因此无法继续从事该项目,该如何解决此问题。

谢谢!

2 个答案:

答案 0 :(得分:2)

您必须在以下表之一上将用户关系设置为可选:

public int? UserId { get; set; }

使属性类型为nullable告诉EF这里不需要级联删除。

答案 1 :(得分:0)

您正在通过将 User Apartment 添加到 Ratings 实体来引起循环引用。 User Apartment 实体已经与 Ratings 集合具有一对多关系。

  

表“ Ratings”上的“ FK_Ratings_Users_UserId”可能会导致循环或   多个级联路径

评级实体的外观如下:

[Table("Ratings")]
public class Rating
{
    [Key]
    public int Id { get; set; }

    public int Value { get; set; }
}