我正在使用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版本来保存数据。
有人可以帮助我提供解决此问题的指导吗?
答案 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;
}