Отношения между родителями и детьми не работают - PullRequest
1 голос
/ 20 апреля 2019

У меня проблема с выполнением отношений родитель-потомок в Entity Framework 6, где у родителя есть список дочерних элементов, а один из дочерних - любимый.При выполнении Entity Add EF выдает эту ошибку:

Ошибка!Невозможно определить действительный порядок для зависимых операций.Зависимости могут существовать из-за ограничений внешнего ключа, требований модели или сгенерированных в хранилище значений.

Пример:

public class Child
{
    public int ChildID { get; set; }
    public string ChildName { get; set; }

    [ForeignKey("Parent")]    
    public int ParentRefId { get; set; }

    public Parent Parent { get; set; }
}

public class Parent
{
    public int ParentId { get; set; }
    public string ParentName { get; set; }

    public int FavoriteChildId {get;set;}

    [ForeignKey("FavoriteChildId")]
    public Child FavoriteChild {get;set;}

    [ForeignKey("ParentRefId")]
    public ICollection<Child> Children { get; set; }
}

не работает, либо:

 public class Child
    {
        public int ChildID { get; set; }
        public string ChildName { get; set; }

        [ForeignKey("Parent")]    
        public int ParentRefId { get; set; }

        public Parent Parent { get; set; }
    }

    public class Parent
    {
        public int ParentId { get; set; }
        public string ParentName { get; set; }

        [ForeignKey("FavoriteChild ")]
        public int FavoriteChildId {get;set;}           

        public Child FavoriteChild {get;set;}            

        public ICollection<Child> Children { get; set; }
    }

1 Ответ

0 голосов
/ 20 апреля 2019

Я предпочитаю Свободный API для подобных конфигураций, но вы можете попробовать Аннотация InverseProperty .

public class Child
{
    public int ChildID { get; set; }
    public string ChildName { get; set; }

    // EF will make FK by convention
    public int ParentId { get; set; }
    public Parent Parent { get; set; }

    public int? FavoriteOfParentId { get; set; }
    public Parent FavoriteOfParent { get; set; }
}

public class Parent
{
    public int ParentId { get; set; }
    public string ParentName { get; set; }

    public int FavoriteChildId {get;set;}           
    [InverseProperty("FavoriteOfParent")]
    public Child FavoriteChild {get;set;}            

    [InverseProperty("Parent")]
    public ICollection<Child> Children { get; set; }
}
...