san*_*tro 2 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);
}
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
Cannot implicitly convert type 'Microsoft.EntityFrameworkCore.ChangeTracking.EntityEntry<Author.Command.Persistence.DBContextAggregate.Articles>' to 'Author.Command.Persistence.DBContextAggregate.Articles'
Run Code Online (Sandbox Code Playgroud)
在这里,我试图使用AddAsync版本来保存数据。
谁能帮助我提供解决此问题的指导?
AddAsync在您的情况下,该方法不只返回提供的类型Articles。它确实返回Task<EntityEntry>。要解决您的问题,请将代码更改为以下内容。
public async Task<Articles> AddAsync(Articles article)
{
await _context.Articles.AddAsync(article);
return article;
}
Run Code Online (Sandbox Code Playgroud)
由于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;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
510 次 |
| 最近记录: |