通用Windows应用程序10 - EF7 SQLite一对多关系

时间:2016-01-22 12:54:28

标签: c# entity-framework sqlite win-universal-app

我是开发西澳大学的新手。我正在尝试开发一个将信息存储在本地数据库中的应用程序。

我可以毫无问题地存储和获取信息,但我找不到如何处理关系。

我有:

public class ToDoItem
{
    public int ToDoItemId
    {
        get; set;
    }

    public int ToDoItemCategoryId
    {
        get; set;
    }

    public virtual ToDoItemCategory ToDoItemCategory
    {
        get; set;
    }

    [Required]
    public string Description
    {
        get; set;
    }
}

并且:

public class ToDoItemCategory
{
    public int ToDoItemCategoryId
    {
        get; set;
    }

    public virtual ICollection<ToDoItem> ToDoItems
    {
        get; set;
    }

    [Required]
    public string Name
    {
        get; set;
    }
}

并且,我以这种方式保存信息:

       using (var db = new DatabaseContext())
       {
                var cat = db.ToDoItemCategories.Single(m => m.ToDoItemCategoryId == SelectedCategory.ToDoItemCategoryId);
                ToDoItem model = new ToDoItem() { Description = description, ToDoItemCategory = cat };
                db.ToDoItems.Add(model);
                db.SaveChanges();
       }

但ToDoItems不会保存到ToDoItemCategory ToDoItems列表中。此外,ToDoItemId正在使用负ID自动生成,我不明白为什么。

我也尝试过类似的东西:

    using (var db = new DatabaseContext())
    {
                var cat = db.ToDoItemCategories.Single(m => m.ToDoItemCategoryId == SelectedCategory.ToDoItemCategoryId);
                ToDoItem model = new ToDoItem() { Description = description, ToDoItemCategory = cat };
                db.ToDoItems.Add(model);
                cat.ToDoItems.Add(model);
                db.SaveChanges();
    }

但没有运气。我在这做错了什么?

1 个答案:

答案 0 :(得分:1)

经过测试和搜索后,我找到了解决这个问题的方法。

 Categories = Context.ToDoItemCategories.Where(predicate).Include(m => m.ToDoItems).ToList();

显然导航属性仅在包含后加载。这样做一切正常。