【问题标题】:Object with fields (one-to-many relations) becomes without fields with Entity Framework具有字段的对象(一对多关系)在实体框架中变为没有字段
【发布时间】: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


    【解决方案1】:

    我应该使用 Include() 方法:

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

    【讨论】:

      猜你喜欢
      • 2012-02-16
      • 2017-09-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-17
      相关资源
      最近更新 更多