我刚刚开始使用 MVC 4,并且在我的应用程序中遇到了一个错误,我需要一些帮助来修复。
我有一个 Author & Book 表。Author 表是父表,您可以有多个 Books 与每个作者关联。
在我尝试删除仍然分配有书籍的作者之前,一切都运行良好。发生这种情况时,我在 SaveChanges() 收到一条错误消息,说明:
DELETE 语句与 REFERENCE 约束“FK_Book_Author”冲突。
该错误非常有意义,但我希望应用程序向用户提供一个很好的错误消息,而不是简单地爆炸。
如何在模型中定义这种关系,以便在删除与关联的子项的记录时不会导致应用程序爆炸?
作者类
public partial class Author
{
public Author()
{
this.Book = new HashSet<Book>();
}
[Key]
public int AuthorId { get; set; }
[Required]
public string AuthorName { get; set; }
public virtual Book Book { get; set; }
}
书类
public partial class Book
{
[Key]
public int BookId { get; set; }
[Required]
public string BookName { get; set; }
[Required]
[ForeignKey("Author")]
public string AuthorId { get; set; }
}
模型
我最近开始尝试覆盖 OnModelCreating,但它似乎没有任何影响。
public partial class BookEntities : DbContext
{
public BookEntities()
: base("name=BookEntities")
{
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Book>().HasRequired(p => p.Author)
.WithMany(b => b.Books)
.HasForeignKey(p => p.AuthorId);
modelBuilder.Entity<Author>()
.HasMany(p => p.Books)
.WithRequired(b => b.Author)
.WillCascadeOnDelete(false);
modelBuilder.Conventions.Remove<OneToManyCascadeDeleteConvention>();
}
public DbSet<Book> Books { get; set; }
public DbSet<Author> Authors { get; set; }
}
部分更新
- 这是关于 0..1-To-Many 关系的问题
- 我正在使用 .edmx。我刚刚了解到这完全否定了 OnModelCreating 方法。
- 看来我可以在 DeleteConfirmed 方法中添加一个 Linq 语句来阻止它崩溃,但我真的不喜欢这种方法。