【发布时间】:2011-02-24 22:07:41
【问题描述】:
MVC 的新手,所以我确信有一种正确的方法可以做到这一点,但我错过了。
我有一个实体“事件”,它有一个子实体/相关实体“事件时间”。当我创建我的编辑操作时,我可以使用 linq 语句加载事件模型。
Event mEvent = db.Events.Single(s => s.EventID == id);
然后在我看来,我通过行走对象来访问孩子:
@Html.EditorFor(model => model.Event.EventTime.DateStart)
这很好用。 Edit Action 获取值,执行魔术绑定并保存更改。
UpdateModel(mEvent);
db.SaveChanges();
现在我的问题。创建动作。在 asp.net 上的示例音乐商店应用程序中,它们告诉您创建一个新的空模型以传递给您的视图。
Event mEvent = new Event();
但是,当我的视图遇到对子实体 Event.EventTime 的任何引用时,它会出现异常。同样在控制器创建操作中,如果我在创建新的 mEvent 对象后尝试设置任何属性,我会得到一个对象引用异常。
Event.EventTime.DateStart = DateTime.Now;
我认为 EF 会在您访问它时神奇地创建孩子。我认为问题是因为我不是从数据库创建模型,它没有外键值来一起引用对象?
那我该怎么做呢?我考虑了一个 ViewModel 并在其中加载每个实体,然后在我的 HTTPPost 操作中,我假设我必须以最低的子级第一顺序更新数据库并在每个都保存到数据库时更新引用?似乎它会起作用,但感觉它违背了 EF 的目的。
感谢您的帮助。
【问题讨论】:
-
Afaik EF 为实体提供了一个工厂构造函数:db.Events.Create()(或一些这样的名称)。您可能仍需要单独实例化 EventTime 并将其添加到您的 Event 实体中,因为 EF 不会神奇地为您生成新实体。
标签: c# asp.net-mvc asp.net-mvc-3 entity-framework