В настоящее время я работаю над приложением блога и наткнулся на следующую проблему.
Я могу удалить авторов, у которых есть 0 блогов, но НЕ могу удалить авторов, у которых есть блоги.
Мой метод удаления HttpPost в AuthorController
[HttpPost, ActionName("Delete")]
public IActionResult DeleteConfirmed(int id)
{
if (ModelState.IsValid) {
try {
Author author = _authorRepository.GetById(id);
_authorRepository.Remove(author);
_authorRepository.SaveChanges();
TempData["Success"] = $"{author.Firstname} {author.Lastname} has been successfully deleted!";
return RedirectToAction(nameof(Index));
}
catch (Exception ex) {
ModelState.AddModelError("", ex.Message);
}
}
Author author2 = _authorRepository.GetById(id);
ViewData["Name"] = $"{author2.Firstname} {author2.Lastname}";
return View(nameof(Delete));
}
Мое сопоставление конфигурации автора
public class AuthorConfiguration : IEntityTypeConfiguration<Author>
{
public void Configure(EntityTypeBuilder<Author> builder)
{
builder.ToTable("Author");
builder.HasKey(a => a.AuthorId);
builder.Property(a => a.Firstname).HasMaxLength(40).IsRequired();
builder.Property(a => a.Lastname).HasMaxLength(40).IsRequired();
builder.HasMany(a => a.Posts)
.WithOne()
.IsRequired()
.OnDelete(DeleteBehavior.Cascade);
}
}
Модель автора
public class Author
{
public int AuthorId { get; set; }
public string Firstname { get; set; }
public string Lastname { get; set; }
public ICollection<Post> Posts { get; set; }
public int NrOfPosts => Posts.Count;
protected Author()
{
Posts = new List<Post>();
}
public Author(string firstname, string lastname) : this()
{
Firstname = firstname;
Lastname = lastname;
}
public void AddPost(Post post)
{
if (Posts.FirstOrDefault(p => p.PostId == post.PostId) == null) {
Posts.Add(post);
}
}
public void RemovePost(Post post)
{
Posts.Remove(post);
}
}
Модель сообщения
public class Post
{
public int PostId { get; set; }
public string Title { get; set; }
public string Content { get; set; }
public DateTime Date { get; set; }
public Category Category { get; set; }
public ICollection<PostTag> Tags { get; set; }
protected Post()
{
Tags = new List<PostTag>();
}
public Post(string title, string content, Category category) : this()
{
Title = title;
Content = content;
Date = DateTime.Now;
Category = category;
}
public void AddTag(Tag tag)
{
if (FindTag(tag.Name) == null) {
Tags.Add(new PostTag(this, tag));
}
}
public void RemoveTag(Tag tag)
{
PostTag postTag = Tags.FirstOrDefault(pt => pt.Tag == tag);
Tags.Remove(postTag);
}
public Tag FindTag(string name)
{
PostTag postTag = Tags.FirstOrDefault(pt => pt.Tag.Name == name);
return postTag?.Tag;
}
}
Чего мне не хватает, чтобы удалить авторов, у которых действительно есть сообщения?
Заранее спасибо