【问题标题】:Cannot implicitly convert type 'Microsoft.EntityFrameworkCore.ChangeTracking.EntityEntry<T>' to 'T'无法将类型“Microsoft.EntityFrameworkCore.ChangeTracking.EntityEntry<T>”隐式转换为“T”
【发布时间】:2019-12-02 18:12:05
【问题描述】:

我正在使用 ASP.NET core 2.2 来开发 web api。我在存储库类中有以下方法:

public async Task<Articles> AddAsync(Articles article)
{
   return await _context.Articles.AddAsync(article);
}

我收到以下错误:

Cannot implicitly convert type 'Microsoft.EntityFrameworkCore.ChangeTracking.EntityEntry<Author.Command.Persistence.DBContextAggregate.Articles>' to 'Author.Command.Persistence.DBContextAggregate.Articles'

这里我尝试使用 AddAsync 版本来保存数据。

谁能帮我提供他们的指导来解决这个问题?

【问题讨论】:

  • 我认为您没有提供足够的代码来识别问题。向我们展示相关代码和整个堆栈跟踪。
  • @RobertHarvey 只要Articles 类只是一个普通模型就足够了。

标签: c# entity-framework-core asp.net-core-2.2


【解决方案1】:

AddAsync 方法不只返回提供的类型,在您的情况下为 Articles。它确实返回Task&lt;EntityEntry&gt;。要解决您的问题,请将您的代码更改为以下内容。

public async Task<Articles> AddAsync(Articles article)
{
   await _context.Articles.AddAsync(article);
   return article;
}

对文章实例所做的更改将持续存在,因为 EFCore 将跟踪提供的实体。 请参阅MSDN 了解更多信息。

现在基本上会发生的事情是将您的Articles 实例添加到DBContext 的DBSet 中。如果为您生成了主键,它实际上会在您提供 AddAsync 方法的实例中设置它。

编辑

正如Chris Pratt 文档中提到的那样

此方法是异步的,仅允许特殊值生成器(例如“Microsoft.EntityFrameworkCore.Metadata.SqlServerValueGenerationStrategy.SequenceHiLo”使用的值生成器)异步访问数据库。对于所有其他情况,应使用非异步方法。

所以你应该改用同步版本Add

所以代码应该是这样的。

public Articles Add(Articles article)
{
   _context.Articles.Add(article);
   return article;
}

【讨论】:

  • 为什么任务没有出现在堆栈跟踪中?
  • @RobertHarvey 我很确定这是由于 await 关键字。
  • 这是我收到的错误:严重性代码描述项目文件行抑制状态错误 CS0029 无法将类型“Microsoft.EntityFrameworkCore.ChangeTracking.EntityEntry”隐式转换为'Author.Command.Persistence.DBContextAggregate.Articles'
  • @santoshkumarpatro:是的,这就是您在原始帖子中所说的。
  • FWIW,你不应该实际使用AddAsync。来自文档:“此方法是异步的,仅允许特殊值生成器,例如 'Microsoft.EntityFrameworkCore.Metadata.SqlServerValueGenerationStrategy.SequenceHiLo' 使用的生成器,异步访问数据库。对于所有其他情况,非异步方法应该是用过的。”请改用Add
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多