Я использую ASP. NET MVC для создания приложения для форумов. У меня есть сущность с именем «Сообщения» и сущность с именем «PostReplies».
В конкретном сообщении будет список ответов, которые связаны с помощью FK: 'Post_Id' в моей сущности 'PostReplies'.
Я хочу знать, как бы я go удалял сообщение, которое затем удаляло бы ответы, связанные с этим сообщением.
Я использовал Fluent API, чтобы попытаться решить эту проблему но я получаю это сообщение об ошибке:
Одна или несколько ошибок проверки были обнаружены во время создания модели:
"BookClub.Data.IdentityUserLogin:: EntityType 'IdentityUserLogin' не имеет> ключа Определите ключ для этого EntityType. BookClub.Data.IdentityUserRole:: EntityType 'IdentityUserRole' не имеет определенного ключа?>. Определите ключ для этого EntityType. IdentityUserLogins: EntityType: EntitySet 'IdentityUserLogins' основан на типе 'Identity'UserLogins' IdentityUserRoles: EntityType: EntitySet «IdentityUserRoles» основан на> типе «IdentityUserRole», для которого не определены ключи. "
Я использую MVC ApplicationDbContext по умолчанию и поэтому в моей базе данных есть таблицы ApplicationUser.
Кто-нибудь знает, как исправить эту проблему?
POST ENTITY MODEL
public class Post
{
public int Id { get; set; }
public string Title { get; set; }
public string Content { get; set; }
public DateTime Created { get; set; }
public virtual Discussion Discussion { get; set; }
public virtual ICollection<PostReply> Replies { get; set; }
public virtual ApplicationUser ApplicationUser { get; set; }
}
POSTREPLY ENTITY MODEL
public class PostReply
{
public int Id { get; set; }
public string Content { get; set; }
public DateTime Created { get; set; }
public virtual Post Post { get; set; }
public virtual ApplicationUser ApplicationUser { get; set; }
}
МЕТОД УДАЛЕНИЯ / ЛОГИН C
public void DeletePost(Post post)
{
var deletePost = _context.Post.FirstOrDefault(p => p.Id == id);
if (deletePost != null)
{
_context.Post.Remove(deletePost);
_context.SaveChanges();
}
}
ПОСТКОНТРОЛЛЕР
[HttpGet]
public ActionResult DeletePost(int id)
{
return View(_postService.GetPost(id));
}
[HttpPost]
public ActionResult DeletePost(Post post)
{
var posts = new Post();
_postService.DeletePost(id, post);
return RedirectToAction("GetPostsByDiscussion","Discussion",
new { id = post.Id })
}
Я использовал Fluent API и написал следующий код:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<PostReply>()
.HasRequired(p => p.Post)
.WithMany(p => p.Replies)
.HasForeignKey(r => r.PostId)
.WillCascadeOnDelete(false);
}