LINQ получить один ко многим отношения с объектом и со списком - PullRequest
0 голосов
/ 21 ноября 2018

У меня есть 2 таблицы с именами SampleQuestions и SampleQuestionsAnswers.

Сведения о таблице

SampleQuestions - SampleQuestionId, Вопрос

SampleQuestionsAnswers - SampleQuestionsAnswerId * SampleQuestion7d * 100 * * 100 *Один вопрос имеет много ответов.

У меня есть такой класс C #

    public class SampleJobQuestions
    {
      [Key]
      public int SampleJobQuestionId { get; set; }
      public string Question { get; set; }
      public List<SampleJobQuestionAnswers> Answers { get; set; }
    }

Используя Entity Framework, как я могу получить список объектов SampleJobQuestions с ответами в виде списка внутри каждого объекта?

1 Ответ

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

Я использую EF Core

public class SampleQuestion
{
    public int SampleQuestionId { get; set; }
    public string Question { get; set; }
    public List<SampleQuestionAnswer> Answers { get; set; }
}

public class SampleQuestionAnswer
{
    public int SampleQuestionAnswerId { get; set; }
    public string Value { get; set; }
}

// Type configuration for SampleQuestion entity
public class SampleQuestionConfiguration : EntityTypeConfiguration<SampleQuestion>
{
    public override void Configure(EntityTypeBuilder<SampleQuestion> builder)
    {
        builder.ToTable("SampleQuestion");

        builder.Property(q => q.SampleQuestionId).UseSqlServerIdentityColumn();

        builder.HasMany(q => q.Answers); // Check that answers has links to questions in database
    }
}

// Type configuration for SampleQuestionAnswer entity
public class SampleQuestionAnswerConfiguration : EntityTypeConfiguration<SampleQuestionAnswer>
{
    public override void Configure(EntityTypeBuilder<SampleQuestionAnswer> builder)
    {
        builder.ToTable("SampleQuestionAnswer");

        builder.Property(b => b.SampleQuestionAnswerId).UseSqlServerIdentityColumn();
    }
}

// Create special context
public class QuestionDbContext : DbContext
{
    public DbSet<SampleQuestion> SampleQuestions { get; set; }
    public DbSet<SampleQuestionAnswer> SampleQuestionsAnswers { get; set; }

    public QuestionDbContext(DbContextOptions options)
         : base(options) { }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder
            .ApplyConfiguration(new SampleQuestionConfiguration())
            .ApplyConfiguration(new SampleQuestionAnswerConfiguration());

        SampleQuestions.Include(x => x.Answers);
    }
}

class Program
{
    static void Main(string[] args)
    {
        QuestionDbContext qContext = new QuestionDbContext(new DbContextOptionsBuilder<QuestionDbContext>()
            .UseSqlServer("connectionString")
            .Options);
        var questions = qContext.SampleQuestions.AsNoTracking(); // not elegant, but it will work
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...