C# 使用多对多关系EF core保存数据

C# 使用多对多关系EF core保存数据,c#,database,entity-framework-core,relationship,C#,Database,Entity Framework Core,Relationship,我有一个购物车,它可以有许多产品,一个产品可以在许多购物车中。我想把产品添加到购物车中,但我不知道该怎么做?如果有人能向我解释这是如何工作的,因为我迷路了 购物车类别: public class Cart { public int Id { get; set; } public int ProductCount { get; set; } public AppUser User { get; set; } public List<CartProduct&g

我有一个购物车,它可以有许多产品,一个产品可以在许多购物车中。我想把产品添加到购物车中,但我不知道该怎么做?如果有人能向我解释这是如何工作的,因为我迷路了

购物车类别:

public class Cart
{
    public int Id { get; set; }
    public int ProductCount { get; set; }
    public AppUser User { get; set; }

    public List<CartProduct> CartProduct { get; set; }
}
汽车服务:

public class SqlCart : ISqlCart
{
    private ManagerZContext _dbContext;

    public SqlCart(ManagerZContext dbContext)
    {
        _dbContext = dbContext;
    }

    public Cart AddProductToCart(Product product, Cart cart)
    {
        List<CartProduct> cartList = _dbContext.CartProduct.Where(cp => cp.CartId == cart.Id).ToList(); 
        cartList.Add(product);

        cart.CartProduct = 
        cart.ProductCount = cartList.Count();

        _dbContext.Attach(cart).State = EntityState.Modified;
        _dbContext.SaveChanges();

        return new Cart();
    }

    public Cart CreateCart(AppUser user)
    {
        Cart cart = new Cart();
        cart.User = user;
        _dbContext.Carts.Add(cart);
        return new Cart();
    }

    public Cart GetCart(AppUser user)
    {
        Cart cart = _dbContext.Carts.Where(c => c.User == user).FirstOrDefault();
        List<CartProduct> cartList = _dbContext.CartProduct.Where(cp => cp.CartId == cart.Id).ToList();
        cart.CartProduct = cartList;

        return cart;
    }
}
公共类SqlCart:ISqlCart { 私有管理器zContext_dbContext; 公共SqlCart(ManagerZContext dbContext) { _dbContext=dbContext; } 公共购物车AddProductToCart(产品、购物车) { List cartList=\u dbContext.CartProduct.Where(cp=>cp.CartId==cart.Id).ToList(); cartList.Add(产品); cart.CartProduct= cart.ProductCount=cartList.Count(); _dbContext.Attach(cart.State=EntityState.Modified; _dbContext.SaveChanges(); 返回新购物车(); } 公共购物车CreateChart(AppUser用户) { 购物车=新购物车(); cart.User=用户; _dbContext.Carts.Add(cart); 返回新购物车(); } 公共购物车GetCart(AppUser用户) { Cart Cart=\u dbContext.Carts.Where(c=>c.User==User.FirstOrDefault(); List cartList=\u dbContext.CartProduct.Where(cp=>cp.CartId==cart.Id).ToList(); cart.CartProduct=cartList; 返回车; } }
我不知道如何在购物车服务中将产品添加到购物车中?

修改您的
AddProductToCart
方法,如-

public Cart AddProductToCart(Product product, Cart cart)
{
    var newCartProduct = new CartProduct { Cart = cart, Product = product };

    // OR
    // var newCartProduct = new CartProduct { CartId = cart.Id, ProductId = product.Id };

    _dbContext.CartProduct.Add(newCartProduct);
    _dbContext.SaveChanges();

    return cart;
}

您必须具有具有
product
cart
参数的
Id
s。

只需使用正确的Id创建一个新CartProduct即可。仅此而已。非常确定您不希望产品类上有OrderId和CartId。但我猜这只是以前实验的遗留物?
public class SqlCart : ISqlCart
{
    private ManagerZContext _dbContext;

    public SqlCart(ManagerZContext dbContext)
    {
        _dbContext = dbContext;
    }

    public Cart AddProductToCart(Product product, Cart cart)
    {
        List<CartProduct> cartList = _dbContext.CartProduct.Where(cp => cp.CartId == cart.Id).ToList(); 
        cartList.Add(product);

        cart.CartProduct = 
        cart.ProductCount = cartList.Count();

        _dbContext.Attach(cart).State = EntityState.Modified;
        _dbContext.SaveChanges();

        return new Cart();
    }

    public Cart CreateCart(AppUser user)
    {
        Cart cart = new Cart();
        cart.User = user;
        _dbContext.Carts.Add(cart);
        return new Cart();
    }

    public Cart GetCart(AppUser user)
    {
        Cart cart = _dbContext.Carts.Where(c => c.User == user).FirstOrDefault();
        List<CartProduct> cartList = _dbContext.CartProduct.Where(cp => cp.CartId == cart.Id).ToList();
        cart.CartProduct = cartList;

        return cart;
    }
}
public Cart AddProductToCart(Product product, Cart cart)
{
    var newCartProduct = new CartProduct { Cart = cart, Product = product };

    // OR
    // var newCartProduct = new CartProduct { CartId = cart.Id, ProductId = product.Id };

    _dbContext.CartProduct.Add(newCartProduct);
    _dbContext.SaveChanges();

    return cart;
}