【发布时间】:2018-10-19 21:48:09
【问题描述】:
我使用实体框架和 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。我该如何解决?
【问题讨论】:
标签: sql entity-framework sqlite orm one-to-many