2 свойства, указывающие сначала на один и тот же класс в коде EF - PullRequest
0 голосов
/ 16 августа 2011

У меня есть объект обсуждения, который сам по себе имеет ParentDiscussion и TopParentDiscussion:

 public class Discussion
    {
        [Key]
        public Guid ID { get; set; }
        public String Message { get; set; }
        public virtual Discussion ParentDiscussion { get; set; }
        public virtual Discussion TopParentDiscussion { get; set; }

    }

И Parent, и TopParent являются необязательными.Я написал следующую ситуацию с Fluent API, и она работает.

        modelBuilder.Entity<Discussion>().HasOptional<Discussion>(a => a.ParentDiscussion).WithOptionalDependent().Map(a => a.MapKey("TopParentId"));
        modelBuilder.Entity<Discussion>().HasOptional<Discussion>(a => a.TopParentDiscussion).WithOptionalDependent().Map(a => a.MapKey("ParentId"));

Но как я могу написать это решение без свободно API, поэтому с аннотациями данных.

Я попробовал это:

        //Foreign Keys
        public Guid? ParentId { get; set; }
        public Guid? TopParentId { get; set; }

        //Relationships

        [ForeignKey("ParentId")]
        public virtual Discussion ParentDiscussion { get; set; }
        [ForeignKey("TopParentId")]
        public virtual Discussion TopParentDiscussion { get; set; }

Но выдает следующую ошибку:

Unable to determine the principal end of an association between the types 'Model.Discussion' and 'Model.Discussion'. The principal end of this association must be explicitly configured using either the relationship fluent API or data annotations.

1 Ответ

0 голосов
/ 16 августа 2011

Вы не можете сопоставить это с аннотациями данных, поскольку вы не предоставляете свойство внешнего ключа и свойство обратной навигации.

Правильное отображение с беглым API:

modelBuilder.Entity<Discussion>()
            .HasOptional<Discussion>(a => a.ParentDiscussion)
            .WithMany()
            .Map(a => a.MapKey("TopParentId"));
modelBuilder.Entity<Discussion>()
            .HasOptional<Discussion>(a => a.TopParentDiscussion)
            .WithMany()
            .Map(a => a.MapKey("ParentId"));

Поскольку вы, вероятно, хотите, чтобы обсуждение было родителем более чем одного другого обсуждения.

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