Я использую 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.Как мне это решить?