Я бы избегал таких утверждений, как:
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
будет искать все модификации и пытаться их сохранить. Установка коллекции после загрузки объекта - это то, что посылает предупреждающие знаки всякий раз, когда я ее вижу. :)