无法更新多个表中的Isactive标志状态

时间:2019-05-07 14:21:06

标签: c# .net entity-framework linq asp.net-web-api

我有类似的模型课

public class Product
{
    public int ProductId { get; set; }
    public string ProductName { get; set; }
    public bool IsActive { get; set; }
    public virtual ICollection<ProductSKU> ProductSKUs { get; set; 
 }

public class ProductSKUResponse
{
    public int Skuid { get; set; }
    public String Sku { get; set; }
    public decimal MRP { get; set; }
    public bool IsActive { get; set; }
}

我想更新多个表中的isactive状态,但是找不到 解决方案,请您让我知道逻辑。

public async Task<ReturnBoolean> DeleteProductById(int Id, bool status)
{
    ReturnBoolean response = new ReturnBoolean();
    Contracts.Entities.Product product = await _productRepository.GetByIdAsync(Id);

    if (product == null)
    {
        throw new ArgumentException("Unable to delete selected product, product does not exist");
    }

    product.IsActive = status;
    product.UpdatedOn = DateTime.Now;
    product.ProductSKUs = await productSkuRepository.GetProductSkus(Id);

    // from this onwards I didn't understand how to assign status value to in product.ProductSKUs.isactive.

    await _productRepository.UpdateAsync(product, true);
    response.BooleanValue = true;
    return response;
}

2 个答案:

答案 0 :(得分:0)

尝试简单的foreach

foreach(ProductSKU productSKU in product.ProductSKUs.ToList())
{
   productSKU.IsActive = status;
}

但这还取决于如何实现此方法_productRepository.UpdateAsync(product, true)

答案 1 :(得分:0)

我会避免这样的语句:

product.ProductSKUs = await productSkuRepository.GetProductSkus(Id);

要么渴望将它们加载到产品中,要么只是单独更新它们。通用存储库或每个实体存储库的麻烦在于,您无法轻松利用急切的加载或Linq的全部功能。

using (var context = new ProductContext())
{
   var product = context.Products.Include(x => x.ProductSKUs).Single(x => x.Id = ID);
   product.IsActive = status;
   foreach( var productSKU in product.ProductSKUs)
       productSKU.IsActive = status;
}

或使用存储库:

var productSKUs = await productSkuRepository.GetProductSkus(Id);
foreach( var productSKU in product.ProductSKUs)
    productSKU.IsActive = status;

将集合分配给产品可能还可以,但是我会谨慎地分配与所涉及动作无关的任何东西,因为SaveChanges将查找所有修改并尝试保存它们。每次加载实体后设置集合的设置都会发出警告信号。 :)