Объект с полями (отношения один ко многим) становится без полей с Entity Framework - PullRequest
0 голосов
/ 20 октября 2018

Я использую Entity Framework и SQLite.

Контекст:

public class WordContext : DbContext
{
    public DbSet<VmWord> Words { get; set; }
    public DbSet<LearnDay> LearnDay { get; set; }

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        optionsBuilder.UseSqlite("Data Source=db_name.db");
    }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        base.OnModelCreating(modelBuilder);
    }
}

Модели:

public class Word
{
    public int Id { get; set; }
    public IList<LearnDay> LearnDay { get; set; }
}

public class LearnDay
{
    public int Id { get; set; }
    public string Key { get; set; }
    public int Value { get; set; }
    public Word Word { get; set; }
}

Как инициализировать и сохранить объект:

using (var db = new WordContext())
{
    db.Words.Add(new VmWord
    {
        LearnDay = new List<LearnDay> 
                    {
                        new LearnDay {
                            Key = "pl",
                            Value = 0
                        },
                        new LearnDay {
                            Key = "en",
                            Value = 0
                        }
                    }
    });
    db.SaveChanges();
}

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

Но затем я пытаюсь получить объект, и он возвращается с:

LearnDay == null

using (var db = new WordContext())
{
    // word != null but LearnDay == null
    var word = db.Words.Where(p => p.Id == testId).FirstOrDefault();
}

И если я сделаю:

using (var db = new WordContext())
{
    // learnDay != null
    // learnDay.Word !=null
    // even learnDay.Word.learnDay !=null
    var learnDay = db.LearnDay.Where(p => p.Word == testWord).FirstOrDefault();

    // then try again to get word:
    // word != null
    // LearnDay != null
    var word = db.Words.Where(p => p.Id == testId).FirstOrDefault();
}

И после последнего крутого я получаю объект с полями! = Null.Как мне это решить?

1 Ответ

0 голосов
/ 20 октября 2018

Я должен использовать метод Include ():

var word = db.Words.Include(x => x.LearnDay).Where(p => p.Id == testId).FirstOrDefault();
...