1
我與實體框架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; }
}
和選擇列表的內容轉到HTML表單下拉。接下來,CategoryId
在用戶提交表單時被髮回服務器。從那裏,我目前在做類似下面的保存更改:
var dbWidget = new Widget
{
Name = model.Name,
Category = db.Categories.Find(CategoryId)
}
db.Widgets.Add(dbWidget);
db.SaveChanges();
所以我的問題是:我可以指定類別的導航屬性,而不做其他數據庫查詢與db.Widgets.Find(WidgetId)
- 我已經知道ID號應該在數據庫的Widgets表格的Category_Category_Id
列中進行查找。此外,看起來好像您擁有5個左右的導航屬性,這對於每個導航屬性來說都是一個重要的性能問題。
感謝亞歷克斯,這個偉大的工程!出於好奇,讓我說我分配了一個不正確的ID(即它不存在) - 這是否會引發錯誤? – Ben
取決於天氣與否,您在數據庫中定義了外鍵關係。 所有這些代碼都將CategoryId設置爲您在代碼中實例化的類別的Id。如果數據庫中存在外鍵約束 - SaveChanges - 將拋出。 –