Asp.net mvc 分配实体框架导航属性(不带查询)

Asp.net mvc 分配实体框架导航属性(不带查询),asp.net-mvc,entity-framework,Asp.net Mvc,Entity Framework,我正在使用entity framework 6的asp MVC5应用程序,希望创建一个具有如下导航属性的对象: public class widget { public int Id { get; set; } public string Name { get; set; } public virtual Category Category { get; set; } } 其中属性类别是数据库模型中的另一个实体。在实现CRUD功能时,我创建了如下视图模型: public

我正在使用entity framework 6的asp MVC5应用程序,希望创建一个具有如下导航属性的对象:

public class widget
{
    public int Id { get; set; }
    public string Name { get; set; }
    public virtual Category Category { get; set; }
}
其中属性
类别
是数据库模型中的另一个实体。在实现CRUD功能时,我创建了如下视图模型:

public class EditWidgetViewModel
{
    public List<SelectListItem> Categories { get; set; }
    public int CategoryId { get; set; }
}

因此,我的问题是:我是否可以分配category navigation属性,而不使用
DB.Widgets.Find(WidgetId)
进行另一次DB查找?我已经知道,在不进行查找的情况下,应该在数据库Widgets表的
category\u category\u id
列中输入id号。此外,如果您有五个左右的导航属性,这将是一个重大的性能问题,每个属性都有一个往返。

您可以使用构造函数创建一个新实体,为其分配一个适当的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();

您可以使用构造函数创建一个新实体,并为其分配一个适当的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();

谢谢Alex,这很好用!出于好奇,假设我分配了一个不正确的id(即,它不存在)-这会引发错误吗?取决于天气,您是否在数据库中定义了外键关系。这段代码所做的只是将CategoryId设置为在代码中实例化的类别的Id。如果数据库中有外键约束-SaveChanges-将抛出。谢谢Alex,这非常有效!出于好奇,假设我分配了一个不正确的id(即,它不存在)-这会引发错误吗?取决于天气,您是否在数据库中定义了外键关系。这段代码所做的只是将CategoryId设置为在代码中实例化的类别的Id。如果数据库中存在外键约束,则将抛出SaveChanges。