我正在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();
}