/// <summary> /// Creates and saves a <see cref="IProduct"/> to the database /// </summary> /// <param name="name"> /// The name. /// </param> /// <param name="sku"> /// The SKU. /// </param> /// <param name="price"> /// The price. /// </param> /// <returns> /// The <see cref="IProduct"/>. /// </returns> public IProduct CreateProductWithKey(string name, string sku, decimal price) { var templateVariant = new ProductVariant(name, sku, price); var product = new Product(templateVariant); if (Creating.IsRaisedEventCancelled(new Events.NewEventArgs <IProduct>(product), this)) { product.WasCancelled = true; return(product); } using (new WriteLock(Locker)) { var uow = _uowProvider.GetUnitOfWork(); using (var repository = _repositoryFactory.CreateProductRepository(uow)) { repository.AddOrUpdate(product); uow.Commit(); } } Created.RaiseEvent(new Events.NewEventArgs <IProduct>(product), this); return(product); }