public void Import(string stream)
        {
            var inputFileDescription = new CsvFileDescription
            {
                SeparatorChar = ',',
                FirstLineHasColumnNames = true
            };
            var cc = new CsvContext();
            var monsterImports = cc.Read<MonsterImport>(stream, inputFileDescription);

            var monsterLevels = _monsterLevelService.GetMonsterLevel().ToDictionary(k => k.Name, v => v);
            var monsters = _monsterService.GetMonsters().ToDictionary(k => k.Name, v => v);

            var monsterList = new List<Monster>();
            foreach (var monsterImport in monsterImports)
            {
                Monster monster = null;
                var name = monsterImport.Unit;
                if (monsters.ContainsKey(name))
                {
                    monster = monsters[name];
                }
                else
                {
                    monster = new Monster();
                    monster.Name = name;
                }

                monster.Attack = monsterImport.Attack;
                monster.Defence = monsterImport.Defense;
                monster.Price = monsterImport.Price;
                monster.Upkeep = monsterImport.Upkeep;
                monster.Element = EnumUtil.ParseEnum<Element>(monsterImport.Element);
                MonsterLevel monsterLevel;
                if (monsterLevels.ContainsKey(monsterImport.Uniqueness))
                {
                    monsterLevel = monsterLevels[monsterImport.Uniqueness];
                }
                else
                {
                    monsterLevel = new MonsterLevel
                        {
                            Active = true,
                            Name = monsterImport.Uniqueness,
                            Tier = monsterLevels.Count() + 1
                        };
                    monsterLevels.Add(monsterImport.Uniqueness, monsterLevel);
                }
                monster.MonsterLevel = monsterLevel;
                monsterList.Add(monster);
            }
            _monsterService.SaveMonsters(monsterList);
        }
        public SaveResult SaveMonster(Monster dirtyMonster)
        {
            var monster = UpdateMonster(dirtyMonster);

            var result = new SaveResult();
            try
            {
                if (monster.MonsterId == 0)
                    _monsterRepository.Add(monster);
                else
                    _monsterRepository.Update(monster);

                result.Successful = true;
            }
            catch (Exception ex)
            {
                result.Error = ex;
                result.Successful = false;
            }

            return result;
        }
 private Monster UpdateMonster(Monster dirtyMonster)
 {
     var monster = _monsterRepository.Find(p => p.MonsterId == dirtyMonster.MonsterId) ?? new Monster {MonsterId = 0};
     monster.Attack = dirtyMonster.Attack;
     monster.Defence = dirtyMonster.Defence;
     monster.Name = dirtyMonster.Name;
     monster.Price = dirtyMonster.Price;
     monster.Upkeep = dirtyMonster.Upkeep;
     monster.Element = dirtyMonster.Element;
     monster.MonsterLevel = dirtyMonster.MonsterLevel;
     return monster;
 }