如何解决实体框架错误-嵌套模型问题
| 我是ASP.NET MVC的新手,并且想要创建一个小型订单管理工具。我的数据库包含表Orders和Articles(以及其他一些表),并且我从数据库中生成了EF模型,因此我可以使用EF映射的全部功能(例如db.Orders.Articles) 我关注的两个主要关系是订单和商品。 一个订单可以有很多物品 一篇文章只能属于一个订单。 我已经使用创建操作创建了一个OrdersController来创建订单: //
// GET: /Orders/Create
public ActionResult Create()
{
Order order = new Order()
{
// filling some order columns,e.g. date
};
Article article = new Article()
{
// ... article columns
};
order.Articles.Add(article);
return View(order);
}
//
// POST: /Orders/Create
[HttpPost]
public ActionResult Create(Order order)
{
// i know i should care more about error handling,but now ommit it
db.Orders.AddObject(order);
db.SaveChanges();
return RedirectToAction(\"index\");
}
因此,我直接将EF对象绑定到视图(在某处阅读,不要这样做,而是使用视图模型,但实际上不知道该视图模型应该是什么样子)
我的视图包含“订单”表单和“商品”表单(因为我想同时创建订单和商品,而不是单独创建)。我使用了这些很棒的EditorFor方法来做到这一点。
现在是我的问题:如果我点击了提交按钮,则应用程序会在出现以下错误消息时立即崩溃:HttpPost创建方法(在映射订单时):
错误消息:EntityCollection
已经初始化。的
InitializeRelatedCollection方法
仅应调用以初始化
在新的EntityCollection
对象图的反序列化。
如果我在VS2010中单击“继续”,它将完成保存订单-所以我的问题是如何以可靠的方式解决此问题。
在此先感谢,并为您的长篇故事感到抱歉:)
解决方法
我现在通过使用像@Yakimych建议的单独的ViewModel解决了我的问题。但是,我没有从EF模型中复制所有属性,而是仅引用它们。我的ViewModel看起来像这样:
public class NewOrderViewModel {
public Order { get; set; }
public List<Article> { get; set; }
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。