Как настроить эту модель отношения с помощью FLUENT API - PullRequest
1 голос
/ 24 июня 2019

Пользователь (AskedUser) может задавать много вопросов другим пользователям (Asker). Пользователи (Asker) могут задавать вопросы другим пользователям (AskedUser). Поэтому у QuestionModel должен быть внешний ключ для запрашиваемого идентификатора пользователя и внешний ключ для пользователя, который задал вопрос.

Сконструировал ли я свои модели так, как я хочу достичь? Как настроить это, используя свободный API, потому что это не достижимо, используя только аннотации данных.

public class ApplicationUser : IdentityUser<long>
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string City { get; set; }
    public string Country { get; set; }
    public DateTime BirthDate { get; set; }
    public ICollection<QuestionModel> AskedQuestions { get; set; }
}
public class QuestionModel
{
    public int Id { get; set; }
    public string Content { get; set; }
    public bool IsAnswered { get; set; }
    public long AskerId { get; set; }
    public ApplicationUser Asker { get; set; }
    public long AskedUserId { get; set; }
    public ApplicationUser AskedUser { get; set; }
}

Это я уже пробовал

 builder.Entity<ApplicationUser>()
           .HasMany(user => user.AskedQuestions)
           .WithOne(q => q.AskedUser)
           .HasForeignKey(user => user.AskedUserId)
           .HasConstraintName("ForeignKey_User_AskedQuestion")
           .HasForeignKey(user => user.AskerId)
           .HasConstraintName("ForeignKey_Asker_QuestionAsked")
           .IsRequired(true);

1 Ответ

0 голосов
/ 24 июня 2019

Вы можете сделать это на QuestionModel

//Asker relation
builder.Entity<QuestionModel>()
           .HasOne(q=> q.Asker)
           .Withmany(u => u.AskedQuestions)
           .HasForeignKey(q=> q.AskerId)
           .HasConstraintName("ForeignKey_Asker_QuestionAsked")
           .IsRequired(true);

//Asked relation
builder.Entity<QuestionModel>()
           .HasOne(q=> q.AskedUser)
           .Withmany()
           .HasForeignKey(q=> q.AskeduserId)
           .HasConstraintName("ForeignKey_User_AskedQuestion")
           .IsRequired(true);

Я использую Fluent API на зависимой модели вместо корневого элемента.

...