.net MVC циклическая ссылка проблема с сущностью - PullRequest
1 голос
/ 10 сентября 2011

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

Мой сайт имеет объект проекта, который принадлежит конкретному пользователю. В проекте есть другая модель для дополнительной информации, которую могут добавить другие пользователи.

Мои модели похожи:

Проект

  • Владелец проекта FK
  • Другие вещи

Информация

  • Проект FK
  • Владелец информации FK
  • Другие вещи

Но я получаю ошибку Ссылочные отношения приведут к циклической ссылке, которая не допускается.

Я думаю, это расстроено, что у меня есть fk для пользователя и в проекте, и в информации. Но пользователи разные, поэтому я не могу от них избавиться. Есть ли способ сказать это?

Опять же, я новичок в .net, так что я надеюсь, что это не глупый вопрос. Я родом из Джанго, если это поможет с объяснением.

Код:

public class Information
{

    [HiddenInput(DisplayValue = false)]
    public int InfoID { get; set; }

    //user
    public virtual User User { get; set; }
    [Required(ErrorMessage = "This field is required.")]
    public int UserID { get; set; }

    //project
    public virtual Project Project { get; set; }
    [Required(ErrorMessage = "This field is required.")]
    public int ProjectID { get; set; }

}

public class Project
{
    [HiddenInput(DisplayValue = false)]
    public int ProjectID { get; set; }

    //user
    public virtual User User { get; set; }
    [Required(ErrorMessage = "This field is required.")]
    public int UserID { get; set; }

}

Я удалил все остальные нереляционные поля, так как они не важны.

1 Ответ

5 голосов
/ 10 сентября 2011

UserID требуется для обеих сущностей, а ProjectID требуется для Information сущности.Это создаст несколько каскадных путей, если вы удалите User.User -> Information и User -> Project -> Information.

Необходимо сопоставить отношения с помощью Fluent API и указать, по крайней мере, одно отношение, которое WillCascadeOnDelete(false)

public class MyContext : DbContext
{
    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Entity<User>()
                    .HasMany(u => u.Informations)
                    .HasRequired(i => i.User)
                    .HasForeignKey(i => i.UserID)
                    .WillCascadeOnDelete(false);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...