Asp.net mvc 分配实体框架导航属性(不带查询)
我正在使用entity framework 6的asp MVC5应用程序,希望创建一个具有如下导航属性的对象: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
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。