实体框架核心:更新一个实体,该实体属于多对多关系

时间:2020-03-27 09:44:44

标签: c# asp.net asp.net-mvc asp.net-core entity-framework-core

我正在ASP.NET核心+ Entity Framework核心中开发一个简单的Notes-App,并且更新的笔记存在问题,这些笔记通过连接表连接到许多标签(NoteTags)

注释对象的所有属性都在数据库中更新(标题,内容,摘要...),除了连接表NoteTag中的全部。

注意课程:

public class Note
{
        public int Id { get; set; }

        public string Title { get; set; }
        public DateTime CreationDateTime { get; set; }

        public string Content { get; set; }
        public string Summary { get; set; }

        public List<NoteTag> NoteTags { get; set; } = new List<NoteTag>();
}

标记类:

public class Tag
{
        public int Id { get; set; }

        public string Name { get; set; }

        public int NotesCount { get; set; }

        public List<NoteTag> NoteTags { get; set; } = new List<NoteTag>();
}

联接表 NoteTag

public class NoteTag
{
        public Note Note { get; set; }
        public int NoteId { get; set; }

        public Tag Tag { get; set; }
        public int TagId { get; set; }
}

注释的创建/删除和更新在管理dbcontext的存储库类中进行。 存储库的更新例程由NotesController调用,后者处理带有要编辑注释的viewModel。

NotesController => EditNote

 public IActionResult EditNote(EditNoteViewModel viewModel)
        {
            if (ModelState.IsValid)
            {
                if (viewModel.SelectedTags != null)
                {
                    var tagList = viewModel.SelectedTags.Split(" ");
                    foreach (string tagName in tagList)
                    {
                        if (tagName.Length != 0 && tagName != " ")
                        {
                            var tag = this._TagRepository.GetTagByName(tagName);

                            if (tag == null)
                                tag = this._TagRepository.CreateTag(new Tag { Name = tagName });

                            viewModel.NoteToEdit.NoteTags.Add(
                                new NoteTag { Note = viewModel.NoteToEdit, NoteId = viewModel.NoteToEdit.Id, Tag = tag, TagId = tag.Id }
                            );
                        }
                    }
                }

                this._NoteRepository.EditNote(viewModel.NoteToEdit.Id, viewModel.NoteToEdit);

Notes存储库 => EditNote(..)

public void EditNote(int id,Note newNote)
        {
            var note = this.GetNote(id);
            foreach (var noteTag in newNote.NoteTags.ToList())
            {
                if (!note.NoteTags.Contains(noteTag))
                {
                    noteTag.Tag.NotesCount += 1;
                    note.NoteTags.Add(noteTag);
                }
            }

            foreach (var noteTag in note.NoteTags.ToList())
            {
                if (!newNote.NoteTags.Contains(noteTag))
                {
                    noteTag.Tag.NotesCount -= 1;
                    note.NoteTags.Remove(noteTag);
                }
            }

            note.Title = newNote.Title;
            note.Content = newNote.Content;
            note.CreationDateTime = newNote.CreationDateTime;
            note.Summary = newNote.Summary;

            this._context.Notes.Update(note);
            this._context.SaveChanges();
        }

0 个答案:

没有答案
相关问题