是否可以以同时适用于 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
}
}
但这只有在编译时已知目标框架时才有效。
- 1 回答
- 0 关注
- 476 浏览
添加回答
举报
0/150
提交
取消