【发布时间】:2018-10-04 15:51:15
【问题描述】:
我使用 .net 核心和实体框架创建了一个 Web api 项目。 这使用了一个存储过程,它返回由实体框架定义的数据库表的大部分属性。
实体框架不会带回表的所有列。当我调用 api 时出现错误,抱怨当我使用 执行存储过程时找不到丢失的列,
_context.Set<TableFromSql>().FromSql("execute dbo.spr_GetValue").ToList();
我创建了另一个模型类,它定义了从 SP 带回的属性(称为 NewClass)。
_context.Set<NewClass>().FromSql("execute dbo.spr_GetValue").ToList();
这可行,但只是想检查是否存在 SP 应仅从数据库返回模型类的约定。
【问题讨论】:
-
见docs。它在限制下声明:SQL 查询必须返回实体或查询类型的所有属性的数据
-
这是否意味着我不应该添加自己的模型类并更改 SP 以返回实体的所有属性。那么真正复杂的 sql SP 不需要返回整个列(可能是在数据库中的表之间使用连接)呢?
-
不,这不是我的意思。 EF Core(自 2.1 起)有两种类型的模型:实体(映射到数据库中的表)和“查询类型”(如 Tau Zhou 在他的回答中提到的)。查询类型不映射到数据库表。从您的查询来看,
TableFromSql是否是模型并不是很清楚。但无论如何,上述限制适用于:实体和查询类型。如果TableFromSql是一个实体并且该过程仅返回属性的子集,则应改用查询类型
标签: entity-framework asp.net-core asp.net-core-webapi