У меня есть этот класс сущностейEF Code First - Определение двухсторонней Navigation Свойства
public class Node
{
[Key]
public int Id { get; private set; }
public string Name { get; set; }
public virtual Node Prev { get; set; }
public virtual Node Next { get; set; }
}
Узел всегда будет иметь 0 или 1 предыдущий узел и 0 или 1 следующего узла.
И я хотел бы EF, чтобы генерировать следующие схемы таблицы
Id | Name | Prev_Id | Next_Id
Как вы скоро заметите, что Next_Id
является излишним, поскольку Prev_Id
достаточно для определения направления отношения.
Моя цель этой схемы таблицы заключается в том, чтобы эффективно запрашивать, имеет ли узел предыдущий/следующий узел без выполнения операции объединения в своей собственной таблице. И я рад принять компромисс, который должен написать дополнительную логику для поддержания правильности предыдущей/следующей ошибки.
Вот моя проблема:
ЭФ не удается создать такую таблицу со следующей ошибкой:
Unable to determine the principal end of an association between the types 'Node' and 'Node'. The principal end of this association must be explicitly configured using either the relationship fluent API or data annotations.
Интересно, если EF позволяет такую конструкцию и как.
ОБНОВЛЕНИЕменяю на это и до сих пор получил ту же ошибку
public class Node
{
[Key]
public int Id { get; private set; }
public string Name { get; set; }
public int PrevId { get; set; }
public int NextId { get; set; }
[ForeignKey("PrevId")]
public virtual Node Prev { get; set; }
[ForeignKey("NextId")]
public virtual Node Next { get; set; }
}
видеть эту ссылку http://www.entityframeworktutorial.net/code-first/inverseproperty-dataannotations-attribute-in-code-first.aspx –
@FrebinFrancis Я пытался следовать инструкциям со следующей конструкцией: общественных class Node { [Key] public int Id {get; частный набор; } public string Имя {get; задавать; } public int PrevId {get; задавать; } public int NextId {get; задавать; } [ForeignKey («PrevId»)] общедоступный виртуальный узел Prev {get; задавать; } [ForeignKey ("NextId")] public virtual Node Next {get; задавать; } } , но я все еще получил ту же ошибку. –
Не могли бы вы показать мне код? Пожалуйста, обновите его в своем вопросе? –