首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用急切加载的存储库通用方法GetById

使用急切加载的存储库通用方法GetById
EN

Stack Overflow用户
提问于 2016-09-07 06:11:23
回答 3查看 2.4K关注 0票数 2

我正在使用实体框架,并希望在Repository类中创建通用的GetById方法,并急切地加载:

下面是我的方法,它使用延迟加载:

代码语言:javascript
运行
AI代码解释
复制
public virtual TEntity GetById(object id)
  {
    return DbSet.Find(id);
  }

我知道方法Find不支持急切加载,但是如何修改此方法以使用急切加载,因此我使用该方法如下(例如):

代码语言:javascript
运行
AI代码解释
复制
_unitOfWork.MyRepository.GetById(includeProperties: "Users");
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-09-07 09:37:19

一种可能的方法是在带有FirstOrDefaultDbSet上使用Include,使用Expression.Equal方法手动构建谓词并不难,但主要的挑战是如何获得密钥属性名。幸运的是,我们可以使用一些ObjectContext方法这样做,因此实现可以这样(假设我们可以访问具体的DbContext实例):

代码语言:javascript
运行
AI代码解释
复制
public virtual TEntity GetById(object id, params string[] includeProperties)
{
    var propertyName = ((System.Data.Entity.Infrastructure.IObjectContextAdapter)DbContext).ObjectContext
        .CreateObjectSet<TEntity>().EntitySet.ElementType.KeyMembers.Single().Name;

    var parameter = Expression.Parameter(typeof(TEntity), "e");
    var predicate = Expression.Lambda<Func<TEntity, bool>>(
        Expression.Equal(
            Expression.PropertyOrField(parameter, propertyName),
            Expression.Constant(id)),
        parameter);

    var query = DbSet.AsQueryable();
    if (includeProperties != null && includeProperties.Length > 0)
        query = includeProperties.Aggregate(query, System.Data.Entity.QueryableExtensions.Include);
    return query.FirstOrDefault(predicate);
}
票数 5
EN

Stack Overflow用户

发布于 2018-03-30 05:12:00

这是实体框架核心2.0的更新。此外,此方法使用带有EF的新元数据属性自动获得第一级导航属性。

代码语言:javascript
运行
AI代码解释
复制
public virtual T Get(object id)
{
        var propertyName = "AddressId";

        //get all navigation properties defined for entity
        var navigationProps = _context.Model.FindEntityType(typeof(T)).GetNavigations();

        //turn those navigation properties into a string array
        var includeProperties = navigationProps.Select(p => p.PropertyInfo.Name).ToArray();

        //make parameter of type T
        var parameter = Expression.Parameter(typeof(T), "e");

        //create the lambda expression
        var predicateLeft = Expression.PropertyOrField(parameter, propertyName);
        var predicateRight = Expression.Constant(id);
        var predicate = Expression.Lambda<Func<T, bool>>(Expression.Equal(predicateLeft, predicateRight), parameter);

        //get queryable
        var query = _context.Set<T>().AsQueryable();

        //apply Include method to the query multiple times
        query = includeProperties.Aggregate(query, Microsoft.EntityFrameworkCore.EntityFrameworkQueryableExtensions.Include);

        //return first item in query
        return query.FirstOrDefault(predicate);
}
票数 1
EN

Stack Overflow用户

发布于 2020-12-07 13:16:42

在仓库里使用这个

代码语言:javascript
运行
AI代码解释
复制
public IQueryable<T> FindByCondition(Expression<Func<T, bool>> expression)
    {
        return this.RepositoryContext.Set<T>().Where(expression).AsNoTracking();
    }

而这就是行动的方法

代码语言:javascript
运行
AI代码解释
复制
var User =  _IRepositoryWrapper.User.FindByCondition(x=>x.Id == id).Include(a=>a.Photos).FirstOrDefault();
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39372237

复制
相关文章
独家 | 在PyTorch中用图像混合(Mixup)增强神经网络(附链接)
作者:Ta-Ying Cheng翻译:陈之炎校对:车前子 本文约2000字,建议阅读5分钟随机混合图像,效果是不是会更好?
数据派THU
2021/07/16
3.5K0
在玩图像分类和图像分割?来挑战基于 TensorFlow 的图像注解生成!
玩过图像分类的开发者不少,许多人或许对图像分割(image segmentation)也不陌生,但图像注解(image caption)的难度,无疑比前两者更进一步。 原因无他:利用神经网络来生成贴合
AI研习社
2018/03/28
1K0
在玩图像分类和图像分割?来挑战基于 TensorFlow 的图像注解生成!
教你在Python中用Scikit生成测试数据集(附代码、学习资料)
原文标题:How to Generate Test Datasets in Python with Scikit-learn 作者:Jason Brownlee 翻译:笪洁琼 校对:顾佳妮 本文教大家在测试数据集中发现问题以及在Python中使用scikit学习的方法。 测试数据集是一个小型的人工数据集,它可以让你测试机器学习算法或其它测试工具。 测试数据集的数据具有定义明确的性质,如线性或非线性,这允许您探索特定的算法行为。 scikit-learn Python库提供了一组函数,用于从结构化的测试问题
数据派THU
2018/03/26
2.8K0
教你在Python中用Scikit生成测试数据集(附代码、学习资料)
开发 | 在玩图像分类和图像分割?来挑战基于 TensorFlow 的图像注解生成!
AI科技评论按:本文刊载于 Oreilly,AI科技评论编译。 玩过图像分类的开发者不少,许多人或许对图像分割(image segmentation)也不陌生,但图像注解(image caption)的难度,无疑比前两者更进一步。 原因无他:利用神经网络来生成贴合实际的图像注释,需要结合最新的计算机视觉和机器翻译技术,缺一不可。对于为输入图像生成文字注解,训练神经图像注解模型能使其成功几率最大化,并能生成新奇的图像描述。举个例子,下图便是在 MS COCO 数据集上训练的神经图像注解生成器,所输出的潜在注解
AI科技评论
2018/03/12
8670
开发 | 在玩图像分类和图像分割?来挑战基于 TensorFlow 的图像注解生成!
利用pipeline实现GrayLog中用日志源IP地址区分主机
在使用GrayLog采集Linux服务器系统日志的过程,在GrayLog 查询界面source列中只能看到主机名, 当主机数量很多时,特别是多个主机有相同主机名时,这时就无法区分日志来自于是哪一台主机了
yuanfan2012
2021/11/25
2K0
利用pipeline实现GrayLog中用日志源IP地址区分主机
在pyqt5中展示pyecharts生成的图像
虽然现在很少有人用python去做一些图形化的界面,但是不得不说我们在日常大部分的软件使用中都还是有可视化与交互这样的需求的。因此pyqt5作为一个主流的python的GUI框架地位是非常重要的,也是一个非常重要的技能。而pyecharts是相当于echarts的python版本,可以比较方便的制作一些非常精美的可视化图片,因为生成的一般是html格式的,所以对于平台的可迁移性相对较好。这里我们主要探索一下在pyqt5制作出来的界面中集成一个pyecharts生成的页面,效果图如下所示:
DechinPhy
2022/05/06
2.2K0
在pyqt5中展示pyecharts生成的图像
【1】GAN在医学图像上的生成,今如何?
最初,GAN在被提出时,是一个无监督(无条件)的生成框架:例如在图像合成中,将随机噪声映射到逼真的目标图像。
公众号机器学习与AI生成创作
2020/04/28
3.1K0
【1】GAN在医学图像上的生成,今如何?
图像生成:SaGAN
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
chaibubble
2019/09/25
1.1K0
图像生成:SaGAN
在 SPIRE 中用 SSH 证实节点身份
前面关于 SPIRE 的内容中,介绍了使用 JOIN Token 证实节点身份的方法。这种方法比较简易,但是完全依赖 SPIRE Server/Agent 的“内循环”,并不利于外部管理,同时每次节点更新,都要照本宣科的重来一遍。对于动态集群来说,这种方式并不理想,SPIRE 包含了面向 OpenStack、几大公有云以及 TPM 等的花钱证实节点身份的方案;除了这些之外,还有个经济型的证实方法——使用 SSH。
崔秀龙
2023/02/27
3620
在 SPIRE 中用 SSH 证实节点身份
图像生成:GAN
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
chaibubble
2019/09/18
9770
图像生成:GAN
终于在 JS 中用上 WeakMap 了!
当我在处理一个滑动组件时,遇到了一个问题,当我快速切换元素的打开和关闭状态时,如果不允许上一个动画完成,新动画最终会失控,阻断后面的动画效果。
ConardLi
2021/10/19
8760
终于在 JS 中用上 WeakMap 了!
在 SwiftUI 中用 zIndex 调整视图显示顺序
本文将对 SwiftUI 的 zIndex 修饰符做以介绍,包括:使用方法、zIndex 的作用域、通过 zIndex 避免动画异常、为什么 zIndex 需要设置稳定的值以及在多种布局容器内使用 zIndex 等内容。
东坡肘子
2022/07/28
1.9K0
在 SwiftUI 中用 zIndex 调整视图显示顺序
我怎么在`Object-C`中用`Swift`
如果你想编译一个应用程序并且这个应用程序包含Swift文件,Swift支持的标准库已经添加到Bundle里面。你可以随时可以在终端运行otool -L查看一个产品包含的FrameWork。这个可以显示你的产品依赖的静态库和FrameWork
君赏
2018/08/31
8680
我怎么在`Object-C`中用`Swift`
在 Ubuntu 中用 UFW 配置防火墙
UFW,即简单防火墙(uncomplicated firewall),是一个 Arch Linux、Debian 或 Ubuntu 中管理防火墙规则的前端。 UFW 通过命令行使用(尽管它有可用的 GUI),它的目的是使防火墙配置简单(即不复杂(uncomplicated))。
会长君
2023/04/25
1.1K0
GAN生成图像综述
生成对抗网络(Generative adversarial network, GAN)[1]自2014年由Ian Goodfellow等人提出后,就越来越受到学术界和工业界的重视。而随着GAN在理论与模型上的高速发展,它在计算机视觉、自然语言处理、人机交互等领域有着越来越深入的应用,并不断向着其它领域继续延伸。其中,GAN在图像生成上取得了巨大的成功,这取决于GAN在博弈下不断提高建模能力,最终实现以假乱真的图像生成。
SIGAI学习与实践平台
2019/05/07
2.1K0
GAN生成图像综述
在tensorflow中用多张图实现网络级联
本文由腾讯云+社区自动同步,原文地址 https://stackoverflow.club/use-multiple-graphs-in-tensorflow/
羽翰尘
2019/11/19
1.1K0
在 SwiftUI 中用 Text 实现图文混排
SwiftUI 提供了强大的布局能力,不过这些布局操作都是在视图之间进行的。当我们想在 Text 中进行图文混排时,需要采用与视图布局不同的思路与操作方式。本文将首先介绍一些与 Text 有关的知识,并通过一个实际案例,为大家梳理出在 SwiftUI 中用 Text 实现图文混排的思路。
东坡肘子
2022/12/16
4.6K0
在 SwiftUI 中用 Text 实现图文混排
Java中用Apache POI生成excel和word文档
最近在做项目的过程中遇到了excel的数据导出和word的图文表报告的导出功能,最后决定用Apache POI来完成该项功能。本文就项目实现过程中的一些思路与代码与大家共享,同时,也作为自己的一个总结,以备后用。
牛老师讲GIS
2018/10/23
3.2K0
Java中用Apache POI生成excel和word文档
点击加载更多

相似问题

如何在没有init的情况下在Hybris中创建表?

14

如何在没有下载的情况下在PyGame中创建贴图?

12

如何在没有xml的情况下在kotlin中创建按钮?

16

如何在没有PostBack的情况下在ASP .NET中填充ListBox?

12

如何在没有任何库导入(如System.random)的情况下在Haskell中创建随机整数列表?

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档