我正在通过以下实体在 .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那里得到答案,但是即使尝试安装HasRequired
,EntityFrameworkCore.Tools
的实现也不起作用。
我知道圆形杂物一直存在问题。从我的直觉来看,该程序不知道删除用户的情况,是否放弃其评级和公寓或类似的东西,这就是为什么它采取这种方式但我无法解决的原因问题。
我的问题是,由于无法创建数据库,因此无法继续从事该项目,该如何解决此问题。
谢谢!
答案 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; }
}