Asp.net mvc 如何在控制器中加载导航属性而不查看它们
我有两门课,一门是作家课,另一门是书课 我在这里向您展示简化代码Asp.net mvc 如何在控制器中加载导航属性而不查看它们,asp.net-mvc,entity-framework,Asp.net Mvc,Entity Framework,我有两门课,一门是作家课,另一门是书课 我在这里向您展示简化代码 class Author { int Id string Name virtual ICollection<Book> Books; } class Book { int Id int AuthorId string Name bool Flag } 在这种方法中,data参数包含作者信息,但不包含书籍信息,因此data.Books为空。原因是我的视图中没有图
class Author
{
int Id
string Name
virtual ICollection<Book> Books;
}
class Book
{
int Id
int AuthorId
string Name
bool Flag
}
在这种方法中,data
参数包含作者信息,但不包含书籍信息,因此data.Books为空。原因是我的视图中没有图书信息,并且视图没有绑定图书信息
我的问题是如何在SaveAuthor方法中填充图书集合,或者最好在保存作者的Web API中填充图书集合。
一个答案是,我应该包括视图中作者的所有书籍(作为隐藏字段),这样我就可以在data
参数中获取它
在不向视图中添加书籍的情况下,是否还有其他方法可以实现此目标
我使用的是VS 2015,可能是MVC4您的图书模型没有AuthorId属性?它实际上有。我错过了,因为我简化了课程。我现在补充说,就个人而言,防止使用
Include
你的方法绝对正确。您只需通过AuthorId
获取所有相关书籍,并更改它们的Flag
属性,然后将其分配给Author.Books
并最终保存更改。var relatedBooks=_context.Books.Where(item=>item.Id==Author.Id).ToList();Author.Books=relatedBooks.ForEach(item=>item.Flag=true)_SaveChanges()哦,我明白了。错误是因为我使用了不同的上下文对象。我使用相同的上下文(而不是使用它的API)加载了这些书,并且工作正常。谢谢
public ActionResult SaveAuthor(Author data)
{
// call Web API to save Author and also update Flag for some of the data.Books.
// but data.Books is empty at this point.
}