是否可以在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
}
}
在使用Entity Framework时,以上方法工作正常,但是在运行EF Core时,.Include()
不起作用(请注意using System.Data.Entity
);
如果using语句更改为using Microsoft.EntityFrameworkCore
,则在运行EF Core而不是Entity Framework时可以使用。
是否有使框架不可知的.Include()
的方法?或至少同时支持EF Core和Entity Framework?
答案 0 :(得分:1)
您可以使用自己的扩展方法来执行此操作,该方法显式调用相应的扩展方法:
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
}
}
但是,只有在编译时就知道目标框架的情况下,这才起作用。