Сделайте идентификатор таблицы своей собственной структурой сущности внешнего ключа - PullRequest
0 голосов
/ 21 ноября 2018

Я хотел знать, возможно ли создать таблицу с идентификатором, меткой и внешним ключом, ссылающимся на идентификатор самой таблицы.Ниже приведен пример того, что я хотел бы сделать, но это не работает, потому что public virtual RubricFo не может быть вызван сам по себе.

public class RubricFO
{
   [Key, Required]
   public int IdRubricFO { get; set; }

   [MaxLength(250)]
   public string LabelRubricFO { get; set; }

   public bool IsActif { get; set; }

   public int RankDisplay { get; set; }

   [ForeignKey("IdRubricFO")]
   public int IdRubricFO_Fk { get; set; }
   public virtual RubricFO RubricFO { get; set; }

   public int IdStructure { get; set; }

   [ForeignKey("IdStructure")]
   public virtual Structures Structures { get; set; }
}

Я не знаю, достаточно ли я ясен, если вам нужны дополнительныеинформация не стесняйтесь спрашивать.

1 Ответ

0 голосов
/ 21 ноября 2018

Да, это возможно.Вы видите это, если вам нужна древовидная структура, где каждый узел дерева имеет ноль или более SubNodes, нет ParentNode, если это верхний узел, или один ParentNode, если это SubNode. * 1005.*

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

    // every Node has zero or more subNodes:
    public virtual ICollection<Node> SubNodes {get; set;}

    // every Node is the subNode of zero or one ParentNode, using foreign key
    public int? ParentId {get; set;}         // null if it is a Top Node
    public virtual Node Parent {get; set;}
}

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

Если нет, вы можете использовать свободный API в вашем DbContext, чтобы сообщить структуре сущностей о модели

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
     // build table Nodes:
     modelBuilder.Entity<Node>()
         .HasKey(node => node.Id)                // not needed, I followed the conventions
         .HasOptional(node => node.Parent)       // every node table has an optional Parent
         .WithMany(node => node.SubNodes)        // every Parent Node has zero or more SubNodes
         .HasForeignKey(node => node.ParentId);  // the foreign key to the parent node

Хорошее упражнение: попробуйте int ParentId вместо int?, нользначение может означать, что нет родителя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...