SQLite EntityFramework多对多Db优先

时间:2016-05-23 18:56:12

标签: c# entity-framework ado.net ef-database-first

我有三个SQLite表:

  1. 包含两列的类别:Id(PK),名称
  2. 包含四列的元素:Id(PK),名称,描述,ImgUrl,
  3. 有两列的ElementsCategories:ElementId(FK),CategoryId(FK)
  4. ** PK =主键,FK =外键

    我创建了ADO.NET模型,我想从数据库中获取所有类别。我的Category类看起来像这样:

    class Category
    {
        public long Id { get; set; }
        public string Name { get; set; }
    
        public virtual ICollection<Element> Elements{ get; set; }
    }
    

    我创建了函数:

    public List<Category> GetCategories()
    {
        List<Category> categories;
    
        using (var db = new MyDb())
        {
            categories= db.Categories.Select(p => new Category
            {
                Id = p.Id,
                Name = p.Name,
                Elements = ????
            }).ToList();
        }
    
        return categories;
    }
    

    我无法获得属于类别的元素列表。我只能从ElementsCategories表中获取元素列表。如何在Category对象中设置Elements to Elements字段列表?

1 个答案:

答案 0 :(得分:0)

根据您描述的内容,您已将联结表(ElementsCategories)映射为实体,在这种情况下,您的查询将如下所示:

public List<Category> GetCategories()
{
    List<Category> categories;

    using (var db = new MyDb())
    {
        categories= db.Categories.Select(p => new Category
        {
            Id = p.Id,
            Name = p.Name,
            Elements = p.ElementsCategories.Select(ec=>ec.Element)
        }).ToList();
    }

    return categories;
}

现在,如果Category是实体类型,则无法运行。我假设您展示的Category课程是DTO