Entity framework EF Core 3.0-无法查询抽象实体(即层次结构中的根实体)
我的应用程序的模型如下所示:Entity framework EF Core 3.0-无法查询抽象实体(即层次结构中的根实体),entity-framework,entity-framework-core,ef-core-3.0,Entity Framework,Entity Framework Core,Ef Core 3.0,我的应用程序的模型如下所示: public abstract class Vehicle { .... } public class Car : Vehicle { .... } public class Boat : Vehicle { .... } ... protected override void OnModelCreating(ModelBuilder modelBuilder) { ... modelBuilder.Entity<Vehicle>()
public abstract class Vehicle { .... }
public class Car : Vehicle { .... }
public class Boat : Vehicle { .... }
...
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
...
modelBuilder.Entity<Vehicle>()
.HasDiscriminator<int>("Type")
.HasValue<Car>(1)
.HasValue<Boat>(2)
...
public DbSet<Vehicle> Vehicles { get; set; }
public DbSet<Car> Cars { get; set; }
public DbSet<Boat> Boats { get; set; }
...
}
但同样的查询在EF Core 3.0上返回的总是空的
SQL探查器显示EF Core 3.0将以下内容附加到查询WHERE子句
SELECT * FROM VEHICLE WHERE CAST(0 AS bit) = CAST(1 AS bit)
这是故意的吗?如果是这样,我的应用程序中的许多代码现在都被破坏了
有没有关于我如何改变这种行为的建议 无法使用提供的信息进行复制(如预期,在(2,1)中添加了[v].[Type])。这里一定没有显示其他内容。事实上,查询中有一个WHERE子句,更像“上下文中的from t.Vehicles WHERE t.model.Equals('model-x')…选择t”,但是为了简单起见,我没有包括WHERE子句。请用足够的信息增强您的问题,以重现该行为。您的
WHERE
子句中的某些内容导致EF Core 3认为它的计算结果总是false
。它可能是显式的Where
子句或全局查询筛选器。试着用文章中的代码复制,如果你不能,那么在原稿中添加其他部分,直到它复制。我发现了问题。也许这是EF3.0上的一个bug。问题在于“Equals()”函数。如果我从t.model.Equals('model-x')
更改为t.model=='model-x'
,它会工作。出于某种原因,Equals()在EF 3.0上有缺陷(同样的查询在EF 2上工作。*)
SELECT * FROM VEHICLE WHERE CAST(0 AS bit) = CAST(1 AS bit)