我有类似的模型课
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;
}
答案 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
将查找所有修改并尝试保存它们。每次加载实体后设置集合的设置都会发出警告信号。 :)