public HttpResponseMessage PostCreateHero(HeroCreateModel heroModel,
            [ValueProvider(typeof(HeaderValueProviderFactory<string>))] string sessionKey)
        {
            var response = this.PerformOperationAndHandleExceptions(() =>
            {
                var context = new StoreContext();

                var user = context.Users.FirstOrDefault(usr => usr.SessionKey == sessionKey);
                if (user == null)
                {
                    throw new InvalidOperationException("Invalid session key");
                }

                Hero newHero = new Hero
                {
                    Name = heroModel.Name,
                    HP = heroModel.HP,
                    MP = heroModel.MP,
                    MagicAttack = heroModel.MagicAttack,
                    MeleAttack = heroModel.MeleAttack,
                    MagicDefense = heroModel.MagicDefense,
                    MeleDefense = heroModel.MeleDefense,
                    Experience = heroModel.Experience,
                    Level = heroModel.Level,
                    User = user
                };

                context.Heros.Add(newHero);
                context.SaveChanges();

                user.Hero = newHero;
                context.SaveChanges();

                var entity = new HeroCreateReturnModel
                {
                    ID = newHero.HeroId,
                    Name = newHero.Name
                };

                var responseMsg = this.Request.CreateResponse(HttpStatusCode.Created, entity);
                return responseMsg;
            });

            return response;
        }
        private void UpdateHero(Hero hero, HeroModel model, StoreContext context)
        {
            if (model.Name != null)
            {
                hero.Name = model.Name;
            }

            if (model.Items != null)
            {
                foreach (var i in model.Items)
                {
                    var item = context.Items.FirstOrDefault(x => x.Name == i.Name);
                    if (item == null)
                    {
                        throw new ArgumentNullException("item", "Cannot use invalid item!");
                    }

                    hero.Items.Add(item);
                }
            }

            hero.MagicAttack = model.MagicAttack;
            hero.MagicDefense = model.MagicDefense;
            hero.MeleAttack = model.MeleAttack;
            hero.MeleDefense = model.MeleDefense;
            hero.Experience = model.Experience;
            hero.HP = model.HP;
            hero.MP = model.MP;
            hero.Level = model.Level;
        }