[英]Cannot resolve symbol SaveChangesAsync
.NET Core和Entity Framework存在以下问题。 我创建了.NET Core项目,添加了DbContext
和所有其他内容。 我的问题是我可以下载数据而没有丝毫问题,不幸的是我无法保存它们,即,我具有Add
方法,但没有SaveChanges
方法。
using Microsoft.AspNetCore.Identity;
using Microsoft.AspNetCore.Identity.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore;
using CRM.Model.Entities;
namespace CRM.Model.Concrete
{
public abstract class ApplicationContext : IdentityDbContext<ApplicationUser>
{
public ApplicationContext(DbContextOptions<ApplicationContext> options) : base(options)
{
}
public DbSet<Category> Categories { get; set; }
public DbSet<Subcategory> Subcategories { get; set; }
public DbSet<SubcategoryL2> SubcategoriesL2 { get; set; }
public DbSet<Event> Events { get; set; }
public DbSet<ApplicationUser> Users { get; set; }
public DbSet<Coupon> Coupons { get; set; }
protected override void OnModelCreating(ModelBuilder builder)
{
base.OnModelCreating(builder);
builder.Entity<SubcategoryL2>().ToTable("Subs");
#region "Seed Data"
builder.Entity<IdentityRole>().HasData(
new { Id = "1", Name = "Admin", NormalizedName = "ADMIN" },
new { Id = "2", Name = "User", NormalizedName = "USER" }
);
#endregion
}
}
}
ICouponRepository
using System.Threading.Tasks;
using CRM.Model.Concrete;
namespace CRM.Repository.Abstract
{
public interface ICouponRepository
{
Task AddCoupon(Coupon coupon);
}
}
CouponRepository
using System.Threading.Tasks;
using CRM.Model.Concrete;
using CRM.Repository.Abstract;
namespace CRM.Repository.Concrete
{
public class CouponRepository : ICouponRepository
{
private readonly ApplicationContext _applicationContext;
public CouponRepository(ApplicationContext applicationContext)
{
_applicationContext = applicationContext;
}
public async Task AddCoupon(Coupon coupon)
{
await _applicationContext.Coupons.AddAsync(coupon);
await _applicationContext.SaveChangesAsync();
}
}
}
我不知道如何解决它,为什么它不起作用:(
CS1061“ ApplicationContext”元素不包含“ SaveChangesAsync”的定义,并且未找到可用的“ SaveChangesAsync”扩展方法,该扩展方法采用“ ApplicationContext”类型的第一个参数(using指令或工具包引用不是吗?) 。
第二次错误
CS0012 C#在未引用集中定义了“ IdentityDbContext <>”类型。 您必须添加对集合“ Microsoft.AspNetCore.Identity.EntityFrameworkCore,版本= 2.2.0.0,区域性=中性,PublicKeyToken = adb9793829ddae60”的引用
我的项目分为几个较小的项目,即主CRM项目。 其中有几个较小的:
问题是,没有丝毫问题,我使用ApplicationContext从数据库中检索数据,不幸的是,我无法使用它来保存任何数据,因为错误如图片中那样弹出。
当我改变
公共抽象类ApplicationContext:IdentityDbContext
至
公共抽象类ApplicationContext:DbContext
一切都好,但是身份对我不起作用
解决方案:解决我的问题的方法是通过NuGet软件包安装Microsoft.AspNetCore.Identity.EntityFrameworkCore软件包。
首先,您需要针对上下文而不是DbSet
调用SaveChangesAsync
,因此您应该编写以下代码:
await _applicationContext.SaveChangesAsync();
其次,作为奖励,除非您确实需要,否则不应使用AddAsync
,您应该这样做:
_applicationContext.Coupons.Add(coupon);
文档状态:
此方法是异步的,仅允许特殊值生成器(例如“ Microsoft.EntityFrameworkCore.Metadata.SqlServerValueGenerationStrategy.SequenceHiLo”使用的生成器)异步访问数据库。 对于所有其他情况,应使用非异步方法。
从第二条错误消息中,您可以清楚地知道要做什么。 安装Microsoft.AspNetCore.Identity.EntityFrameworkCore
NuGet包到项目CouponRepository
位于如下:
PM> Install-Package Microsoft.AspNetCore.Identity.EntityFrameworkCore -Version 2.2.0
或者,您也可以通过添加以下项目将Microsoft.AspNetCore.App
元包添加到CouponRepository
项目。
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.App" />
</ItemGroup>
错误现在应该消失!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.