【问题标题】:EF Core 3 DbQuery equivalent functionalityEF Core 3 DbQuery 等效功能
【发布时间】:2020-04-13 02:41:59
【问题描述】:

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

public partial class AppDbContext{
    public DbQuery<SimpleQueryModel> SimpleQM {get;set;}
}

然后

var result=_dbContext.SimpleQM.FromSql(sqlString,params);

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

public partial class AppDbContext{
    public DbSet<SimpleQueryModel> SimpleQM {get;set;}
}

在模型创建中

builder.Entity<SimpleQueryModel>().HasNoKey();

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

builder.Entity<SimpleQueryModel>().HasNoKey().Ignore();

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

【问题讨论】:

    标签: c# .net-core entity-framework-core ef-core-3.0 ef-core-3.1


    【解决方案1】:

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

    builder.Entity<SimpleQueryModel>().HasNoKey().ToView("view_name_that_doesnt_exist");
    

    【讨论】:

    • 丑陋,但有效。他们决定不以明智的方式支持这一点。
    • @JamesHancock,没必要丑陋,这与修饰常规集合的方式相似(如果不准确)。这是根据github.com/dotnet/efcore/issues/14194 引用的 - 引用:“我们在 2.1 中引入了“查询类型”作为没有定义主键的类型。然而,越来越多的人认为这些应该只是没有主键的实体类型定义。这并不意味着它们的行为会有所不同,只是它们将由实体类型表示并称为实体类型。”
    • 顺便说一句,这与我们在数据库世界中处理视图的方式非常相似。视图是集合,归根结底,可以以相同的方式连接和计算,只是源定义略有不同。也许不是一点点,但..只有;-)
    猜你喜欢
    • 2020-06-12
    • 2019-03-02
    • 1970-01-01
    • 1970-01-01
    • 2021-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-25
    相关资源
    最近更新 更多