public ActionResult School(int id = 0)
        {
            ViewBag.Edit = id != 0;

            List <Address> addresses;

            using (var repository = new NHGetAllRepository <Address>())
            {
                addresses = repository.GetAll().ToList();
            }

            var listAddress = (IEnumerable <SelectListItem>) new SelectList(addresses, "Id", "FullAddress");

            List <SchoolType> types;

            using (var repository = new NHGetAllRepository <SchoolType>())
            {
                types = repository.GetAll().ToList();
            }

            var listType = (IEnumerable <SelectListItem>) new SelectList(types, "Id", "Name");


            SchoolDto school = new SchoolDto();

            if (id != 0)
            {
                using (var repository = new NHRepository <School>())
                {
                    var t = repository.Get(id);
                    school = new SchoolDto()
                    {
                        Id      = t.Id,
                        Address = t.Addresses.ToList()[0].Id,
                        Name    = t.Name,
                        Type    = t.Type.Id
                    };
                }


                listAddress = addresses.Select(x =>
                                               new SelectListItem()
                {
                    Text = x.FullAddress, Selected = x.Id == school.Address, Value = x.Id.ToString()
                });

                listType = types.Select(x =>
                                        new SelectListItem()
                {
                    Text = x.Name, Selected = x.Id == school.Type, Value = x.Id.ToString()
                });
            }

            ViewData["Address"] = listAddress;
            ViewData["Type"]    = listType;

            return(View(school));
        }
        public ActionResult School(SchoolDto school)
        {
            List <Address> addresses;

            using (var repository = new NHGetAllRepository <Address>())
            {
                addresses = repository.GetAll().ToList();
            }

            var list = (IEnumerable <SelectListItem>) new SelectList(addresses, "Id", "FullAddress");

            ViewData["Address"] = list;

            List <SchoolType> types;

            using (var repository = new NHGetAllRepository <SchoolType>())
            {
                types = repository.GetAll().ToList();
            }

            ViewData["Type"] = new SelectList(types, "Id", "Name");



            ViewBag.Edit = school.Id != 0;


            if (school.Name.IsNullOrEmpty())
            {
                ModelState.AddModelError("Name", "Поле не может быть пустым");
            }
            if (school.Address == 0)
            {
                ModelState.AddModelError("Address", "Поле не может быть пустым");
            }

            if (!ModelState.IsValid)
            {
                return(View(school));
            }


            var session = NHibernateHelper.OpenSession();


            using (var tx = session.BeginTransaction())
            {
                var address = session.Query <Address>().First(x => x.Id == school.Address);
                var type    = session.Query <SchoolType>().First(x => x.Id == school.Type);

                var entity = new School()
                {
                    Id        = school.Id,
                    Name      = school.Name,
                    Addresses = new List <Address>()
                    {
                        address
                    },
                    Type = type
                };

                session.SaveOrUpdate(entity);

                tx.Commit();
            }

            return(RedirectToAction("Index"));
        }