Entity Framework Code First: ограничение FOREIGN KEY может вызвать циклы или несколько каскадных путей

Entity Framework Code First может сгенерировать БД для следующих POCO.

public class Item {
    public int Id { get; set; }
    public string Name { get; set; }
}

public class ItemPair {
    public int Id { get; set; }

    public virtual Item FirstItem { get; set; }
    public virtual Item SecondItem { get; set; }
}

Я хотел бы установить связь с первым и вторым элементом через поля идентификатора, а не со всем классом «Item». Итак:

public class ItemPair {
    public int Id { get; set; }

    public virtual Item FirstItem { get; set; }
    public int FirstItem_Id { get; set; }

    public virtual Item SecondItem { get; set; }
    public int SecondItem_Id { get; set; }
}

тоже работает. Изменить : На самом деле это не сработало. Просто генерирует дополнительные столбцы FirstItem_Id1 и SecontItem_Id2.

Но простое изменение свойств внешнего ключа на FirstItemId, SecondItemId (без подчеркивания), например:

public class ItemPair {
    public int Id { get; set; }

    public virtual Item FirstItem { get; set; }
    public int FirstItemId { get; set; }

    public virtual Item SecondItem { get; set; }
    public int SecondItemId { get; set; }
}

приводит к следующему исключению.

{"Introducing FOREIGN KEY constraint 'ItemPair_SecondItem' on table 'ItemPair' may cause
cycles or multiple cascade paths. Specify ON DELETE NO ACTION or ON UPDATE NO ACTION,
or modify other FOREIGN KEY constraints.\r\nCould not create constraint. 
See previous errors."}

Почему? И что я могу сделать, чтобы избежать этого исключения.

16
задан Pauly 23 November 2011 в 03:02
поделиться