不带查询

时间:2016-12-03 20:05:45

标签: asp.net-mvc entity-framework

我正在使用带有实体框架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号没有进行查找的数据库。此外,看起来如果你有五个左右的导航属性,这将是一个重大的性能问题,每个往返一次。

1 个答案:

答案 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();