// POST api/Products
        public HttpResponseMessage PostProduct(Product product)
        {
            if (ModelState.IsValid)
            {
                db.Products.Add(product);
                db.SaveChanges();

                HttpResponseMessage response = Request.CreateResponse(HttpStatusCode.Created, product);
                response.Headers.Location = new Uri(Url.Link("DefaultApi", new { id = product.Id }));
                return response;
            }
            else
            {
                return Request.CreateResponse(HttpStatusCode.BadRequest);
            }
        }
        public virtual ActionResult Create(Product product, string pictureIds, int[] tagIds)
        {
            if (ModelState.IsValid) {
                // Produkt mit den Bildern anreichern.
                var guids = _stringToGuids(pictureIds).ToArray();

                _SetProductPictures(product, guids);
                _SetProductTags(product, tagIds);

                db.Products.Add(product);
                db.SaveChanges();
                return RedirectToAction("Index");
            }

            return View(product);
        }
        // PUT api/Products/5
        public HttpResponseMessage PutProduct(int id, Product product)
        {
            if (ModelState.IsValid && id == product.Id)
            {
                db.Entry(product).State = EntityState.Modified;

                try
                {
                    db.SaveChanges();
                }
                catch (DbUpdateConcurrencyException)
                {
                    return Request.CreateResponse(HttpStatusCode.NotFound);
                }

                return Request.CreateResponse(HttpStatusCode.OK);
            }
            else
            {
                return Request.CreateResponse(HttpStatusCode.BadRequest);
            }
        }
        /// <summary>
        /// Bilder zum Produkt hinzufügen.
        /// </summary>
        /// <param name="product"></param>
        /// <param name="pictureIds">Komma-getrennte Guids.</param>
        private void _SetProductPictures(Product product, IEnumerable<Guid> guids)
        {
            var gs = guids.ToArray();

            // Erstmal alle Bilder vom Produkt entfernen, die nicht mehr dazu gehören.
            var toRemove = product.Pictures.Where(p => !guids.Contains(p.Id)).ToArray();
            foreach (var p in toRemove) { product.Pictures.Remove(p); }

            for(var i=0; i<gs.Count(); i+=1) {
                var id = gs[i];
                var pp = product.Pictures.FirstOrDefault(p => p.Id == id);
                if (pp == null) {
                    pp = new Picture() {
                        ProductId = product.Id,
                        //Picture = _GetPictureById(id)
                    };

                    throw new NotImplementedException();

                    product.Pictures.Add(pp);
                }

                // Bilder reihen.
                pp.Pos = i;
            }
        }
        /// <summary>
        /// Tags zum Produkt hinzufügen.
        /// </summary>
        /// <param name="product"></param>
        /// <param name="tagIds"></param>
        private void _SetProductTags(Product product, int[] tagIds) 
        {
            var toRemove = product.Tags.Where(p => !tagIds.Contains(p.Id)).ToArray();
            foreach (var t in toRemove) { product.Tags.Remove(t); }

            foreach (var id in (tagIds ?? new int[]{})) {
                if (!product.Tags.Any(t => t.Id == id)) {
                    product.Tags.Add(db.Tags.Find(id));
                }
            }
        }