无法将类型'Microsoft.EntityFrameworkCore.ChangeTracking.EntityEntry <T>'隐式转换为'T'

时间:2019-07-24 14:37:32

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

我正在使用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版本来保存数据。

有人可以帮助我提供解决此问题的指导吗?

1 个答案:

答案 0 :(得分:4)

在您的情况下,AddAsync方法不会仅返回提供的类型。Articles。它确实返回Task<EntityEntry>。要解决您的问题,请将代码更改为以下代码。

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

由于EFCore会跟踪提供的Entity,因此对项目实例所做的更改将保留。 有关更多信息,请参见MSDN

  

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

编辑

正如文档中提到的Chris Pratt

  

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

因此,您应该改为使用同步版本Add

所以代码应该看起来像这样。

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