無法跟蹤實體類型的實例,因為更新數據庫時另一個實例…EF Core出錯

Service:

public Cart AddProductToCart(Product product, Cart cart)
{
    var productExist = _dbContexet.CartProduct.Where(cp => cp.ProductId == product.Id).FirstOrDefault();
    var quantityOfCart = _dbContexet.CartProduct.Where(cp => cp.CartId == cart.Id).FirstOrDefault().Quantity;

    CartProduct cartProduct = new CartProduct();
    cartProduct.CartId = cart.Id;
    cartProduct.ProductId = product.Id;

    if (productExist != null)
    {
        cartProduct.Quantity = quantityOfCart + 1;
        _dbContexet.Attach(cartProduct).State = EntityState.Modified;
    }
    else
    {
        cartProduct.Cart = cart;
        cartProduct.Product = product;
        _dbContexet.CartProduct.Add(cartProduct);
    }
    _dbContexet.SaveChanges();
    return cart;
}

Full error:

InvalidOperationException:無法跟蹤實體類型“CartProduct”的實例,因為已在跟蹤另一個具有{CartId',ProductId}相同鍵值的實例。附著現有實體時,請確保僅附著一個具有給定鍵值的實體實例。考慮使用'DbContextOptionsBuilder.EnableSensitiveDataLogging'查看沖突的鍵值。

我有多對多和表CartProduct我想檢查產品是否存在,如果存在只更新數量,但我得到這個錯誤?

Eddit:

Product:

public partial class Product
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public decimal Price { get; set; }
        public string Category { get; set; }
        public decimal CostToMake { get; set; }
        public decimal FinalPrice { get; set; }
        //public int? OrderId { get; set; }

        public virtual Order Order { get; set; }
        public List<CartProduct> CartProduct { get; set; }
    }

Cart:

 public class Cart
        {
            public int Id { get; set; }
    
            public int ProductCount { get; set; }
    
            public AppUser User { get; set; }
    
            public List<CartProduct> CartProduct { get; set; }
        }

CartProduct:

public class CartProduct
    {
        public int CartId { get; set; }
        public int ProductId { get; set; }

        public Cart Cart { get; set; }
        public Product Product { get; set; }

        public int Quantity { get; set; }
    }

FluentAPI:

protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            base.OnModelCreating(modelBuilder);

            modelBuilder.HasAnnotation("Relational:Collation", "Cyrillic_General_CI_AS");

            modelBuilder.Entity<Day>(entity =>
            {
                entity.Property(e => e.Date).HasColumnType("date");

                entity.Property(e => e.MostCommonCategory)
                    .IsRequired()
                    .HasMaxLength(50)
                    .IsUnicode(false);

                entity.Property(e => e.MostCommonProduct)
                    .IsRequired()
                    .HasMaxLength(100)
                    .IsUnicode(false);

                entity.Property(e => e.TotalMade).HasColumnType("decimal(18, 3)");

                entity.Property(e => e.TotalSpent).HasColumnType("decimal(18, 3)");
            });

            modelBuilder.Entity<Order>(entity =>
            {
                entity.Property(e => e.Date).HasColumnType("date");               

                entity.Property(e => e.Status)
                    .IsRequired()
                    .HasMaxLength(100)
                    .IsUnicode(false);

                entity.Property(e => e.Name).HasMaxLength(100);

                entity.Property(e => e.Address).HasMaxLength(150);

                entity.Property(e => e.PhoneNumber).HasMaxLength(20);
            });

            modelBuilder.Entity<Product>(entity =>
            {
                entity.HasIndex(e => e.OrderId, "IX_Products_OrderId");

                entity.Property(e => e.Category)
                    .IsRequired()
                    .HasMaxLength(50)
                    .IsUnicode(false);

                entity.Property(e => e.CostToMake).HasColumnType("decimal(18, 3)");

                entity.Property(e => e.FinalPrice).HasColumnType("decimal(18, 3)");

                entity.Property(e => e.Name)
                    .IsRequired()
                    .HasMaxLength(50)
                    .IsUnicode(false);

                entity.Property(e => e.Price).HasColumnType("decimal(18, 3)");

                entity.HasOne(d => d.Order)
                    .WithMany(p => p.Products)
                    .HasForeignKey(d => d.OrderId);
            });

            modelBuilder.Entity<Cart>(entity => {
                entity.HasKey(e => e.Id);
                entity.HasOne(e => e.User)
                .WithOne(e => e.Cart)
                .HasForeignKey<AppUser>(e => e.CartId);
            });

            modelBuilder.Entity<CartProduct>()
            .HasKey(e => new { e.CartId, e.ProductId });

            modelBuilder.Entity<CartProduct>()
            .HasOne(t => t.Cart)
            .WithMany(t => t.CartProduct)
            .HasForeignKey(t => t.ProductId);

            modelBuilder.Entity<CartProduct>()
            .HasOne(t => t.Product)
            .WithMany(t => t.CartProduct)
            .HasForeignKey(t => t.CartId);

            OnModelCreatingPartial(modelBuilder);
        }
? 最佳回答:

您可以使用EF特性以不同的方式執行某些操作。

public Cart AddProductToCart(Product product, Cart cart)
{
  var product = _dbContexet.Product.Where(cp => cp.ProductId == product.Id).Include(x => x.CartProduct).FirstOrDefault();
  var quantityOfCart = _dbContexet.CartProduct.Where(cp => cp.CartId == cart.Id).FirstOrDefault().Quantity;
  var cartProduct = product.CartProduct.Where(x=>x.CartId == cart.id).FirstOrDefault();

  if (cartProduct != null)
  {
    cartProduct.Quantity = quantityOfCart + 1;
  }
  else
  {
     product.CartProduct.Add(new CartProduct { CartId = cart.id });
  }

  //_dbContexet.Update(product) if you are using QueryTrackingBehavior.NoTracking
  _dbContexet.SaveChanges();
  return cart;
}
主站蜘蛛池模板: 夜精品a一区二区三区| 亚洲中文字幕丝袜制服一区| 波多野结衣中文字幕一区| 自慰无码一区二区三区| 国产拳头交一区二区| 欧美日韩国产免费一区二区三区| 亚洲中文字幕丝袜制服一区 | 手机福利视频一区二区 | 日本精品3d动漫一区二区| 高清国产AV一区二区三区| 精品视频在线观看你懂的一区| 国产精品一区二区无线| 欧美日韩一区二区成人午夜电影 | jizz免费一区二区三区| 国产成人高清亚洲一区91| 亚洲一区二区三区成人网站 | 伊人色综合视频一区二区三区 | 国产色精品vr一区区三区| 日韩一区二区三区视频久久| 在线不卡一区二区三区日韩| 国产怡春院无码一区二区| 日韩免费一区二区三区| 在线免费视频一区| 精品免费国产一区二区三区| 日本一区二区三区精品视频| 国产一区二区三区免费视频 | 精品少妇ay一区二区三区| 精品国产鲁一鲁一区二区 | 91一区二区视频| AA区一区二区三无码精片| 亚洲国产AV一区二区三区四区| 亚洲精品国产suv一区88| 波多野结衣一区二区三区88| 国产婷婷一区二区三区| 亚洲国产成人一区二区精品区 | 日韩一区二区三区精品| 国产伦一区二区三区高清| 水蜜桃av无码一区二区| 亚洲国产欧美国产综合一区| 日本精品一区二区三区四区| 岛国无码av不卡一区二区|