我正在使用带有实体框架6的asp MVC5应用程序,并希望创建一个具有如下导航属性的对象:
public class widget
{
public int Id { get; set; }
public string Name { get; set; }
public virtual Category Category { get; set; }
}
其中属性Category
是数据库模型中的另一个实体。当我实现CRUD功能时,我创建了一个类似的视图模型:
public class EditWidgetViewModel
{
public List<SelectListItem> Categories { get; set; }
public int CategoryId { get; set; }
}
并且selectList的内容转到html表单的下拉列表中。接下来,当用户提交表单时,CategoryId
会回发到服务器。从那里开始,我正在做类似以下的事情来保存更改:
var dbWidget = new Widget
{
Name = model.Name,
Category = db.Categories.Find(CategoryId)
}
db.Widgets.Add(dbWidget);
db.SaveChanges();
所以我的问题如下:我可以分配类别导航属性而不用db.Widgets.Find(WidgetId)
进行另一次数据库查找 - 我已经知道应该在Widgets表的Category_Category_Id
列中输入的ID号没有进行查找的数据库。此外,看起来如果你有五个左右的导航属性,这将是一个重大的性能问题,每个往返一次。
答案 0 :(得分:0)
您可以使用构造函数创建新实体,为其指定正确的ID 然后使用dbContext的Entry()。状态如下:
Category category = new Category { Id = CategoryId };
db.Entry(category).State = EntityState.Unchanged;
var dbWidget = new Widget
{
Name = model.Name,
Category = category
}
db.Widgets.Add(dbWidget);
db.SaveChanges();