我有一个新的断开连接的POCO(在我的情况下来自aspnet mvc modelbinder)。
public class OfflineEntry
{
public virtual int Id { get; set; }
public virtual Category Category { get; set; }
public virtual int CategoryId { get; set; }
}
外键属性(CategoryId
)设置为现有数据库值,但导航引用(Category
)最初为空。加载导航参考的正确方法是什么?我希望第一步是将新对象添加到上下文中。然后在SaveChanges
之前,我可以使用延迟加载,还是LoadProperty
,还是必须手动设置?
public ContentResult Save(OfflineEntry o)
{
db.OfflineEntries.Add(o);
var categoryName = o.Category.Name; //?
db.SaveChanges();
return Content("ok");
}
public class Category
{
public virtual int Id { get; set; }
public virtual string Name { get; set; }
//optional 2-way nav property
}
答案 0 :(得分:2)
我希望其他人会跳过这个专家,但我发现你遇到的一个问题是你的OfflineEntry
实例不是从你的DbContext创建的,因而是LazyLoading没有去上班。
通常,最好不要将实体模型用作视图模型,这是其中一个原因。
所以我的建议是创建一个NewOfflineEntryViewModel
,如下所示:
public class NewOfflineEntryViewModel
{
public int CategoryId { get; set; }
}
然后手动从DbContext中检索类别
public ContentResult Save(NewOfflineEntryViewModel model)
{
var category = db.Categories.Find(model.CategoryId);
var newEntry = db.OfflineEntries.Create();
db.OfflineEntries.Add(newEntry);
newEntry.Category = category;
db.SaveChanges();
var categoryName = category.Name; //for whatever you needed with this
return Content("ok");
}