为了账号安全,请及时绑定邮箱和手机立即绑定

如何在实体框架和 EF Core 中使用 .Include()

如何在实体框架和 EF Core 中使用 .Include()

C#
喵喔喔 2021-11-28 19:45:18
是否可以以同时适用于 Entity Framework 6 和 EF Core 的方式使用 .Include()?我目前有可以访问IQueryable<>但不知道其来源的命令处理程序,并且可以根据运行的上下文更改源。例如,在运行实际应用程序时使用 Entity Framework 6,但使用 EF Core 进行测试(使用 SQLite In Memory 提供程序)using System.Data.Entity;class DemoCommandHandler{    public void Handle(IQueryable<Blog> blogsQueryable, DemoCommand command)    {        //Need to get the blog and all the posts here        var blogs = blogsQueryable.Include(b => b.Posts).Single(b => b.Id = command.BlogId);        //Do stuff with blog and posts    }}以上在使用实体框架时工作正常,但.Include()在运行 EF Core 时不起作用(注意using System.Data.Entity);如果 using 语句更改为,using Microsoft.EntityFrameworkCore则它在运行 EF Core 时有效,但在 Entity Framework 中无效。有没有办法使框架不可知.Include()?或者至少支持 EF Core 和实体框架?
查看完整描述

1 回答

?
侃侃尔雅

TA贡献1801条经验 获得超16个赞

您可以使用自己的扩展方法来执行此操作,该方法显式调用适当的扩展方法:


public static class EntityFrameworkExtensions

{

    public static IQueryable<T> Include<T, TProperty>(this IQueryable<T> source, Expression<Func<T, TProperty>> path)

        where T : class

    {

        #if NETCOREAPP2_0

        return Microsoft.EntityFrameworkCore.EntityFrameworkQueryableExtensions.Include(source, path);

        #else

        return System.Data.Entity.DbExtensions.Include(source, path);

        #endif

    }

}

但这只有在编译时已知目标框架时才有效。


查看完整回答
反对 回复 2021-11-28
  • 1 回答
  • 0 关注
  • 476 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信