//Метод добавляем пользователя в базу public static void RegisterUser(RegisterModel user) { //если данные валидны(логин и email не заняты) if ((RegisterValid(user) & RegisterValidError.AllErrors) == RegisterValidError.Nope) { using (DBContext db = new DBContext()) { //создаём запись о новом пользователе User newUser = new User(); newUser.Login = user.Login; newUser.Email = user.Email; newUser.Password = user.Password; //и добавляем её в базу db.Users.Add(newUser); db.SaveChanges(); return; } } //а иначе ловите исключение else { throw new RegiserFailException(RegisterValid(user).ToString()); } }
//удаление поста и связанных с ним данных public static void removePost(int postId, string username) { using (var db = new DBContext()) { //ищим пост предназначенный для удаления //за одно проверяем, принадлежит ли он данному юзеру Post post = db.Posts.FirstOrDefault(p => p.Id_post == postId && p.User.Login == username); //если пост есть и у юзера есть права на его удаление if (post != null) { //ищем и удаляем изображение из поста Image image = post.Image; if (image != null) db.Images.Remove(image); //ищем и удаляем теги, которые больше не используются //это такие теги, с которыми связан только 1 пост var unuseTags = post.Tags.Where(p => p.Posts.Count == 1); db.Tags.RemoveRange(unuseTags); //удаляем сам пост и сохраняем изменения db.Posts.Remove(post); db.SaveChanges(); } else { throw new PostNotExistOrNotAccessException(); } } }
//Метод добавляет теги в базу private static ICollection<Tag> addTags(string tagsString) { using (var db = new DBContext()) { //разбиваем строку тегов на список строк по ',' //откидываем лишние пробелы по краям тегов IEnumerable<string> listTagString = tagsString.Split(',').Select(s => s.Trim()); //создаём список тегов из listTagString //каждая строка это имя тега ICollection<Tag> tags = listTagString.Select(tag => new Tag() { name = tag }).ToList(); //добавляем теги в базу //если тег там уже есть, то не пытаемся добавить его снова foreach (Tag tag in tags) { if (!db.Tags.Any(t => t.name == tag.name)) { db.Tags.Add(tag); } } //сохраняем изменения db.SaveChanges(); return tags; } }
//Метод ассоциирует пост с тегами private static void relatedTagsAndPost(int postId, ICollection<Tag> tagList) { using (var db = new DBContext()) { //берём из базы пост с указанным id Post post = db.Posts.FirstOrDefault(p => p.Id_post == postId); //ищем в базе наши теги и оссоциируем с ними данный пост foreach (var element in tagList) { Tag tag = db.Tags.FirstOrDefault(t => t.name == element.name); post.Tags.Add(tag); } //сохраняем изменения db.SaveChanges(); } }
//добавляем новый пост в базу //postModel - текстовые данные введённый пользователем //image - изображение в том виде, в каком мы получили его от браузера //username - имя пользователя, которому принадлежит пост public static void addPost(CreatePostModel postModel, HttpPostedFileBase image, string username) { using (DBContext db = new DBContext()) { Post post = new Post(); //добавление к записи заголовка и текста post.Header = postModel.Header; post.Text = postModel.Text; //добавляем изображение if (image != null) { post.Image = new Image { ImageMimeType = image.ContentType, ImageData = new byte[image.ContentLength] }; //записываем битарей изображения image.InputStream.Read(post.Image.ImageData, 0, image.ContentLength); } //добавляем пользователя, автора поста post.User = db.Users.FirstOrDefault(u => u.Login == username); Debug.Assert(post.User != null, "пользователь не существует"); //сохранение в базе db.Posts.Add(post); db.SaveChanges(); //добавляем теги в базу var tags = addTags(postModel.Tags); //ассоциируем с ними пост relatedTagsAndPost(post.Id_post, tags); } }