【问题标题】:The required column 'id' was not present in the results of a `FromSql` operation in EFcoreEFcore 中的“FromSql”操作的结果中不存在所需的列“id”
【发布时间】:2019-09-26 04:45:46
【问题描述】:

FromSql 有一个大问题,就是这样:

我有一个这样的模型:

public partial class  model
{
    public string name
}

我想从我在数据库(sql server)中的过程中得到一些结果。 当我执行下面的代码时

var sql = "EXECUTE [myprocedure] @param1 ";
SqlParameter sqlParameter = new SqlParameter
{
     ParameterName = "param1",
     DbType = DbType.Int32,
     Value = 10;
}
var result = db.model.FromSql(sql,SqlParameter);

它显示了这样的异常: The entity type 'model' requires a primary key to be defined. 所以我将主键添加到我的模型中:

public partial class  model
{
    [key]
    public int ID {set;get;}

    public string name
}

但是这次它显示了这个执行:The required column 'ID' was not present in the results of a 'FromSql' operation.

我知道我必须将ID 添加到我的数据库响应中,但我不能这样做,因为我的数据库中有很多程序,所以我无法编辑所有程序。 所以我正在寻找一种方法来解决我的问题,而无需编辑我的程序。

有人能帮帮我吗?!

【问题讨论】:

  • 我会将该 fromsql 保存到一个 var 中并在运行时检查它返回的内容可能是区分大小写的,并且 ID 确实是 ID,例如

标签: c# sql-server entity-framework linq entity-framework-core


【解决方案1】:

如果您使用的是 Entity Framework Core 2.x,请查看查询类型 (https://docs.microsoft.com/en-us/ef/core/modeling/query-types)。 表(实体类型)总是需要一个 ID,而查询类型则不需要。

对于查询类型,您可以省略 ID。否则,您必须确保您的存储过程也返回一个 ID,因为表/实体类型总是需要一个。

从 EF Core 3.0 开始,有一个 .HasNoKey() 代替查询类型来定义没有 ID 的实体 (https://docs.microsoft.com/de-de/ef/core/what-is-new/ef-core-3.0/breaking-changes#query-types-are-consolidated-with-entity-types)。

【讨论】:

  • 感谢@ctron 的回复,你说我使用ExecuteSqlCommand 而不是FromSql。如果是:我需要我的程序中的一些结果,所以我不能使用ExecuteSqlCommand,如果不是:你能描述更多并举个例子吗?
  • 您使用的是 EF6 还是 EF Core?如果您在问题建议中使用 EF Core 作为“entity-framework-core”标签,则查询类型就是解决方案。对于 EF6,我认为没有这样的事情(但也许有一位 EF6 专家知道解决方案)。也许像 Dapper 这样的框架可以替代调用存储过程。 Entity Framework 在更改跟踪和处理表格方面更有优势。
  • 我测试了它并且它工作。但我使用的是 EF Core 3,它显示了一个警告 DbQuery() is obsoleted. use DBSet<T> instead !!我该怎么办?!
  • @amir133 使用未发布(预览)软件是您的权利,但风险也是如此。您不能指望我们解决此类软件中的问题。在它发布之前,所有问题都应该转到他们的 GitHub 问题跟踪器。
  • 我对 3.0 版的更改还没有任何经验。一个好的起点可能是docs.microsoft.com/de-de/ef/core/what-is-new/ef-core-3.0/… 似乎现在有一个 .HasNoKey() 用于实体。
猜你喜欢
  • 1970-01-01
  • 2019-07-20
  • 2020-07-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多