实体框架错误-嵌套模型问题

问题描述

| 我是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; }
}