如何访问实体框架连接表

问题描述 投票:0回答:1

Orders
Products
之间是多对多关系,EF自动生成了一张Join表。当下订单时,在控制器中,我需要访问连接表来更改属性
Quantity
,但我无法访问它,因为
OrderProduct
模型不在上下文类上。

我给你看一些截图,希望你能提供解决方案,请帮助我。 :)

https://i.stack.imgur.com/TpyV8.png

https://i.stack.imgur.com/KoOgD.png

https://i.stack.imgur.com/RkKNQ.png

https://i.stack.imgur.com/Vu5E5.png

我非常感谢那些帮助我的人,因为我不太了解实体框架,我无法解决问题,

最诚挚的问候,卢卡。

我尝试将

OrderProduct
类添加到上下文类中,但它不起作用,我尝试在 Google 上找到解决方案,但无法修复它。

c# .net database entity-framework .net-core
1个回答
0
投票

如果您使用 Entity Framework Core 并且订单和产品表之间存在多对多关系,EF Core 将自动为您创建一个联接表。但是,如果您需要直接访问此联接表以更新 Quantity 属性,则需要在 DbContext 类中显式配置它。

以下是如何配置多对多关系并访问 DbContext 类中的联接表:

定义订单、产品和连接表(我们称之为 OrderProduct)的模型:

public class Order
{
    public int OrderId { get; set; }
    public ICollection<OrderProduct> OrderProducts { get; set; }
}

public class Product
{
    public int ProductId { get; set; }
    public ICollection<OrderProduct> OrderProducts { get; set; }
}

public class OrderProduct
{
    public int OrderId { get; set; }
    public Order Order { get; set; }

    public int ProductId { get; set; }
    public Product Product { get; set; }

    public int Quantity { get; set; }
}

在 DbContext 类中配置多对多关系:

public class YourDbContext : DbContext
{
    public DbSet<Order> Orders { get; set; }
    public DbSet<Product> Products { get; set; }
    public DbSet<OrderProduct> OrderProducts { get; set; }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<OrderProduct>()
            .HasKey(op => new { op.OrderId, op.ProductId });

        modelBuilder.Entity<OrderProduct>()
            .HasOne(op => op.Order)
            .WithMany(o => o.OrderProducts)
            .HasForeignKey(op => op.OrderId);

        modelBuilder.Entity<OrderProduct>()
            .HasOne(op => op.Product)
            .WithMany(p => p.OrderProducts)
            .HasForeignKey(op => op.ProductId);
    }
}

现在,您可以访问控制器中的 OrderProduct 连接表来更新 Quantity 属性:

public class YourController : ControllerBase
{
    private readonly YourDbContext _context;

    public YourController(YourDbContext context)
    {
        _context = context;
    }

    public IActionResult UpdateOrderProductQuantity(int orderId, int productId, int quantity)
    {
        var orderProduct = _context.OrderProducts
            .SingleOrDefault(op => op.OrderId == orderId && op.ProductId == productId);

        if (orderProduct != null)
        {
            orderProduct.Quantity = quantity;
            _context.SaveChanges();
            return Ok("Quantity updated successfully");
        }

        return NotFound("Order product not found");
    }
}

这样,您可以直接在控制器中访问连接表(OrderProduct)并根据需要更新 Quantity 属性。确保正确处理错误情况并添加任何必要的错误检查和验证逻辑。

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.