Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/react-native/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Entity framework EF Core 3.0-无法查询抽象实体(即层次结构中的根实体)_Entity Framework_Entity Framework Core_Ef Core 3.0 - Fatal编程技术网

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)