protected override IProduct PerformGet(Guid key)
        {
            var sql = GetBaseQuery(false)
                      .Where(GetBaseWhereClause(), new { Key = key });

            var dto = Database.Fetch <ProductDto, ProductVariantDto, ProductVariantIndexDto>(sql).FirstOrDefault();

            if (dto == null)
            {
                return(null);
            }

            var inventoryCollection        = ((ProductVariantRepository)_productVariantRepository).GetCategoryInventoryCollection(dto.ProductVariantDto.Key);
            var productAttributeCollection = ((ProductVariantRepository)_productVariantRepository).GetProductAttributeCollection(dto.ProductVariantDto.Key);

            var factory = new ProductFactory(productAttributeCollection, inventoryCollection, GetProductOptionCollection(dto.Key), GetProductVariantCollection(dto.Key));
            var product = factory.BuildEntity(dto);

            // TODO - inventory
            //((ProductVariant) ((Product) product).MasterVariant).CatalogInventoryInventory =
            //    ((ProductVariantRepository) _productVariantRepository).GetCategoryInventoryCollection(
            //        ((Product) product).ProductVariantKey);

            //// Build the list of options
            //product.ProductOptions = GetProductOptionCollection(product.Key);

            //// Build the list of product variants
            //product.ProductVariants = GetProductVariantCollection(product.Key);

            product.ResetDirtyProperties();

            return(product);
        }