0

我有一个新的断开连接的 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
}
4

1 回答 1

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");
}
于 2013-04-09T20:56:12.230 回答