【问题标题】:Loading Related Entities in a Repository using EntityFramework [duplicate]使用 EntityFramework 在存储库中加载相关实体 [重复]
【发布时间】:2016-05-23 16:55:27
【问题描述】:

在我的模型中,我有一个 User 聚合根,每个聚合根都有一组关联的 Transactions。每个Transaction 都有一个反向导航属性User

我需要一次获取所有 Transactions,这导致我的 UserRepository 中出现以下查询

public ICollection<ITransaction> GetAllTransactions() {

    return (from u in Set.Include("Transactions") 
            from t in u.Transactions
            select t).ToList();       
}

Set 是 EF 上下文中的 IDbSet&lt;User&gt;

问题是懒加载没有实现(我也不想实现),查询后的Transaction.User属性是null。一切都通过 EF 正确映射。

用非空User 检索所有Transactions 的查询应该是什么?

我正在使用 EF6。

【问题讨论】:

  • 如果您想填充User 属性,那么您需要在您的交易中使用.Include("User")。试试from t in u.Transactions.Include("User") 而不是from t in u.Transactions
  • 你能不能只做select new t, t.User之类的事情
  • 抱歉,Set 是 EF 上下文中的 IDbSet&lt;User&gt;
  • @mark 不,您不能从非动态方法返回匿名类型。
  • @Maarten 我试过了,但我得到了一个编译/智能感知错误,Include 无法解决。 User.TransactionsICollection&lt;Transaction&gt;

标签: c# .net entity-framework


【解决方案1】:

您实际上需要Include Transaction.User。可以在像这样最终投影到Transaction 之后完成

public ICollection<ITransaction> GetAllTransactions()
{    
    return Set.SelectMany(u => u.Transactions).Include(t => t.User).ToList();       
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-01
    • 1970-01-01
    • 2011-09-29
    • 2017-11-07
    • 2020-02-06
    • 2011-01-04
    相关资源
    最近更新 更多