带有外键的实体框架选择为空?

Posted

技术标签:

【中文标题】带有外键的实体框架选择为空?【英文标题】:Entity Framework selection with foreign key is empty? 【发布时间】:2016-06-18 19:03:39 【问题描述】:

我的模型TreeTreeImage 中有两个表,这些表之间的关系分别是一对多,我在两个表中都有数据,这是数据库优先模型。

我遇到的问题是,当我从表 Tree 中选择时,我可以看到 TreeImage 属性但它是空的,我希望这有一些值,因为表之间的关系确实存在,我不我不认为我应该 Join TreeImage 表或者从一开始就拥有 Relational Constrains 有什么好处。

我应该怎么做才能从TreeUmage看到一些价值

实体:

树类

public partial class Tree

    public Tree()
    
        this.TreeLeaves = new HashSet<TreeLeave>();
        this.UserTrees = new HashSet<UserTree>();
        this.TreeImages = new HashSet<TreeImage>();
    

    public int TreeID  get; set; 
    public string TreeTitle  get; set; 
    public string TreeDescription  get; set; 

    public virtual ICollection<TreeLeave> TreeLeaves  get; set; 
    public virtual ICollection<UserTree> UserTrees  get; set; 
    public virtual ICollection<TreeImage> TreeImages  get; set; 

我的选择查询

 using (var db = new ...())
        
            return (from tree in db.Trees
                    select tree).ToList();
        

此代码生成此输出

   ["TreeID":1,"TreeTitle":"Red Mable","TreeDescription":"Hello 
 ","TreeLeaves":[],"UserTrees":[],"TreeImages":[],... 

我正在从事一个需要我使用技术的项目,但我无法让自己走上解决这个问题的正确道路。

【问题讨论】:

【参考方案1】:

尝试使用 Include 扩展方法。

using (var db = new ...())

    return (from tree in db.Trees.Include("TreeImages")
            select tree).ToList();

如果你想使用 lambda 表达式,你必须添加:

using System.Data.Entity;

然后你可以像这样使用它:

db.Trees.Include(t => t.TreeImages)

【讨论】:

这行得通:return db.Trees.Include("TreeImages").ToList(); 我完全忘记了该方法采用的是字符串参数。对于那个很抱歉。很高兴你知道了。

以上是关于带有外键的实体框架选择为空?的主要内容,如果未能解决你的问题,请参考以下文章

SQLITE:选择共享相同外键的所有项目

实体框架代码优先:具有两个外键的表

C# Entity Framework Code-First-如何仅使用该外键的 id 添加带有外键的行?

同一列上具有多个外键的实体框架核心

实体框架中与代码优先外键的更改冲突

如何在实体框架中为复合主键的特定列创建外键