Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# MVC 3使用实体框架和子实体创建操作_C#_Asp.net Mvc_Asp.net Mvc 3_Entity Framework - Fatal编程技术网

C# MVC 3使用实体框架和子实体创建操作

C# MVC 3使用实体框架和子实体创建操作,c#,asp.net-mvc,asp.net-mvc-3,entity-framework,C#,Asp.net Mvc,Asp.net Mvc 3,Entity Framework,MVC新手,所以我确信有一种正确的方法可以做到这一点,但我没有 我有一个实体“Event”,它有一个子实体/相关实体“EventTime”。当我创建编辑操作时,我可以使用linq语句很好地加载事件模型 Event mEvent = db.Events.Single(s => s.EventID == id); 然后在我看来,我通过行走对象来接近孩子: @Html.EditorFor(model => model.Event.EventTime.DateStart) 这很有效。编辑

MVC新手,所以我确信有一种正确的方法可以做到这一点,但我没有

我有一个实体“Event”,它有一个子实体/相关实体“EventTime”。当我创建编辑操作时,我可以使用linq语句很好地加载事件模型

Event mEvent = db.Events.Single(s => s.EventID == id);
然后在我看来,我通过行走对象来接近孩子:

@Html.EditorFor(model => model.Event.EventTime.DateStart)
这很有效。编辑操作获取值,执行魔法绑定并保存更改

UpdateModel(mEvent);  
db.SaveChanges();
现在来谈谈我的问题。创建操作。在asp.net上的示例音乐商店应用程序中,他们告诉您创建一个新的空模型以传递到视图

Event mEvent = new Event();
但是,当我的视图命中对子实体Event.EventTime的任何引用时,它会出现异常。此外,在控制器创建操作中,如果在创建新的mEvent对象后尝试设置任何属性,则会出现对象引用异常

Event.EventTime.DateStart = DateTime.Now;
我以为EF会在你访问它时神奇地创建这个孩子。我假设问题是因为我不是从db创建模型,它没有外键值一起引用对象

那么我该怎么做呢?我考虑了一个ViewModel并加载其中的每个实体,然后在我的HTTPPost操作中,我假设我必须以最低的子级顺序更新DB,并在每个引用保存到数据库时更新引用?看起来它会起作用,但感觉它违背了EF的目的


谢谢你的帮助

莫顿,你说得对。我必须创建EventTime对象的实例并将其分配给Event.EventTime。成功了。我想这是有道理的,它不会自动为我这样做。谢谢你的评论

Afaik EF为实体提供工厂构造函数:db.Events.Create()(或类似名称)。您可能仍然需要单独实例化EventTime并将其添加到事件实体中,因为EF不会神奇地为您生成新实体。