EF Core 3 DbQuery 等效功能

Rez*_*adi 9 c# entity-framework-core .net-core ef-core-3.0 ef-core-3.1

在 ef core 2.2 中,我使用 DbQuery 将原始 sql 结果映射到对象,如下所示:

public partial class AppDbContext{
    public DbQuery<SimpleQueryModel> SimpleQM {get;set;}
}
Run Code Online (Sandbox Code Playgroud)

进而

var result=_dbContext.SimpleQM.FromSql(sqlString,params);
Run Code Online (Sandbox Code Playgroud)

这不会创建任何额外的表并且工作得很好。在 ef core 3.1 DbQuery 已过时,并告诉我改用无键 DbSet。我已将其配置如下:

public partial class AppDbContext{
    public DbSet<SimpleQueryModel> SimpleQM {get;set;}
}
Run Code Online (Sandbox Code Playgroud)

并在模型创建中

builder.Entity<SimpleQueryModel>().HasNoKey();
Run Code Online (Sandbox Code Playgroud)

但这将在新数据库迁移中创建一个新表,如果我告诉 ef 忽略此实体如下

builder.Entity<SimpleQueryModel>().HasNoKey().Ignore();
Run Code Online (Sandbox Code Playgroud)

我不能使用_dbContext.SimpleQM.FromSqlRaw();它会抛出异常并告诉该模型未包含在上下文中。如何在 ef core 3.1 中实现相同的功能?

Rez*_*adi 8

问题解决了!刚用这个配置。

builder.Entity<SimpleQueryModel>().HasNoKey().ToView("view_name_that_doesnt_exist");
Run Code Online (Sandbox Code Playgroud)

  • 丑陋,但有效。他们决定不以明智的方式支持这一点。 (5认同)