«FK_Ratings_Users_UserId» в таблице «Рейтинги» может вызвать циклы или несколько каскадных путей - PullRequest
0 голосов
/ 12 сентября 2018

Я пытаюсь в .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, как в заголовке

«FK_Ratings_Users_UserId» в таблице «Рейтинги» может вызвать циклы или несколько каскадных путей

Я попытался добавить, как в EFCore учебном пособии здесь Каскадное поведение modelBuilder, но оно не работает, потому что я получаю ту же ошибку. Я также попытался сделать ответ из здесь , но реализация для HasRequired не работает, даже если попытаться установить EntityFrameworkCore.Tools.

Я понимаю, что существует проблема с циркулярной штукой . По моей интуиции, программа не знает, что делать в случае удаления пользователя, если отбросить или нет его рейтинги и апартаменты или что-то в этом роде, и именно поэтому она действует так, но я не могу исправить проблема.

У меня вопрос, как я могу решить эту проблему, поскольку я не могу создать свою базу данных и, следовательно, я не могу продолжать работу над проектом.

Спасибо!

Ответы [ 2 ]

0 голосов
/ 12 сентября 2018

Вам нужно будет сделать необязательные отношения с пользователем в одной из таблиц, например:

public int? UserId { get; set; }

Если для свойства типа указано значение NULL, то EF не требует здесь каскадного удаления.

0 голосов
/ 12 сентября 2018

Вы вызываете циклическую ссылку, добавляя Пользователь и Квартира к объекту Рейтинги .Объекты Пользователь и Квартира уже имеют отношение один-ко-многим к коллекции Ratings .

«FK_Ratings_Users_UserId» в таблице «Рейтинги» может вызывать циклы или множественные каскадные пути

Вот так должна выглядеть сущность Рейтинги :

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

    public int Value { get; set; }
}
...