Entity framework core EF6->;EFCore 3.1左外连接
我正在评估从EF6升级到EFCore 3.1的过程,我被简单的左外连接卡住了。我们有大量代码,如以下“ 因此,它似乎是由System.Linq和Microsoft.EntityFrameworkCore之间的名称空间冲突造成的 我补充说Entity framework core EF6->;EFCore 3.1左外连接,entity-framework-core,linq-to-entities,ef-core-3.1,Entity Framework Core,Linq To Entities,Ef Core 3.1,我正在评估从EF6升级到EFCore 3.1的过程,我被简单的左外连接卡住了。我们有大量代码,如以下“ 因此,它似乎是由System.Linq和Microsoft.EntityFrameworkCore之间的名称空间冲突造成的 我补充说 public static class DbSetExtensions { public static IAsyncEnumerable<TEntity> AsAsyncEnumerable<TEntity>(this Micro
public static class DbSetExtensions
{
public static IAsyncEnumerable<TEntity> AsAsyncEnumerable<TEntity>(this Microsoft.EntityFrameworkCore.DbSet<TEntity> obj) where TEntity : class
{
return Microsoft.EntityFrameworkCore.EntityFrameworkQueryableExtensions.AsAsyncEnumerable(obj);
}
public static IQueryable<TEntity> Where<TEntity>(this Microsoft.EntityFrameworkCore.DbSet<TEntity> obj, System.Linq.Expressions.Expression<Func<TEntity, bool>> predicate) where TEntity : class
{
return System.Linq.Queryable.Where(obj, predicate);
}
}
公共静态类DbSetExtensions
{
公共静态IAsyncEnumerable ASASASyncEnumerable(此Microsoft.EntityFrameworkCore.DbSet obj),其中tenty:class
{
返回Microsoft.EntityFrameworkCore.EntityFrameworkQueryableExtensions.AsAsAsAsAsyncEnumerable(obj);
}
公共静态IQueryable Where(此Microsoft.EntityFrameworkCore.DbSet obj,System.Linq.Expressions.Expression谓词),其中tenty:class
{
返回系统.Linq.Queryable.Where(obj,谓词);
}
}
根据此处的建议,发送至我的班级基础:
如果我删除此覆盖,则此操作有效:
IQueryable<SearchItemResponseDataModel> items = from item in db.Item.AsQueryable()
from e in db.Ingredient.AsQueryable().Where(a => item.ItemId == a.ItemId).DefaultIfEmpty()
select new SearchItemResponseDataModel
{
ItemId = item.ItemId,
Name = item.Name,
IsActive = item.IsActive,
Description = item.Description,
Color = e.Color
};
IQueryable items=来自db.item.AsQueryable()中的项
从db.component.AsQueryable()中的e开始,其中(a=>item.ItemId==a.ItemId).DefaultIfEmpty()
选择新的SearchItemResponseDataModel
{
ItemId=item.ItemId,
名称=项。名称,
IsActive=item.IsActive,
描述=项目。描述,
颜色
};
最好有一个覆盖,这样我就不需要到处添加.AsQueryable():(有些问题,因为第一种模式通常有效。您测试的是什么确切的EF Core版本?您能否提供最小但完全可复制的示例?请参阅上面的更新。我的覆盖导致了问题;但是,我仍在寻找解决方案以避免此冲突。您似乎忽略了错误的重要部分r消息?
public static class DbSetExtensions
{
public static IAsyncEnumerable<TEntity> AsAsyncEnumerable<TEntity>(this Microsoft.EntityFrameworkCore.DbSet<TEntity> obj) where TEntity : class
{
return Microsoft.EntityFrameworkCore.EntityFrameworkQueryableExtensions.AsAsyncEnumerable(obj);
}
public static IQueryable<TEntity> Where<TEntity>(this Microsoft.EntityFrameworkCore.DbSet<TEntity> obj, System.Linq.Expressions.Expression<Func<TEntity, bool>> predicate) where TEntity : class
{
return System.Linq.Queryable.Where(obj, predicate);
}
}
IQueryable<SearchItemResponseDataModel> items = from item in db.Item.AsQueryable()
from e in db.Ingredient.AsQueryable().Where(a => item.ItemId == a.ItemId).DefaultIfEmpty()
select new SearchItemResponseDataModel
{
ItemId = item.ItemId,
Name = item.Name,
IsActive = item.IsActive,
Description = item.Description,
Color = e.Color
};