繁体   English   中英

无法解析符号SaveChangesAsync

[英]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();
        }
    }
}

问题出在CouponRepository中,即 在此处输入图片说明

我不知道如何解决它,为什么它不起作用:(

CS1061“ ApplicationContext”元素不包含“ SaveChangesAsync”的定义,并且未找到可用的“ SaveChangesAsync”扩展方法,该扩展方法采用“ ApplicationContext”类型的第一个参数(using指令或工具包引用不是吗?) 。

第二次错误

CS0012 C#在未引用集中定义了“ IdentityDbContext <>”类型。 您必须添加对集合“ Microsoft.AspNetCore.Identity.EntityFrameworkCore,版本= 2.2.0.0,区域性=中性,PublicKeyToken = adb9793829ddae60”的引用

我的项目分为几个较小的项目,即主CRM项目。 其中有几个较小的:

  • CRM.Core
  • CRM.Services
  • CRM.Repository
  • CRM.Resources
  • CRM.Model

问题是,没有丝毫问题,我使用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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM