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

时间:2011-05-27 11:50:21

标签: asp.net entity-framework asp.net-mvc-3

我是ASP.NET MVC的新手,想要创建一个小型订单管理工具。我的数据库包含表和订单和文章(以及其他一些),我从我的数据库生成了一个EF模型,所以我可以使用EF映射的全部功能(例如db.Orders.Articles)

我关注的两个主要关系是订单和文章。

  • 订单可以包含多篇文章
  • 一篇文章只能属于一个订单。

我创建了一个带有Create动作的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对象绑定到一个视图(在某处不读取并使用视图模型,但不知道该视图模型应该是什么样子)

我的观点包含订单表格和文章表格(因为我想同时创建订单和文章而不是单独的)。我使用这些greate EditorFor Methods来做到这一点。

现在我的问题是:如果我点击提交按钮,应用程序会在遇到HttpPost创建方法(映射订单时)时崩溃,并显示以下错误消息:

  

错误消息:EntityCollection   已经初始化了。该   InitializeRelatedCollection方法   应该只调用初始化a   新的EntityCollection期间   对象图的反序列化。

如果我在VS2010中点击继续,它将完成保存订单 - 所以我的问题是如何以可靠的方式解决这个问题。

提前致谢并抱歉这个长篇故事:)

1 个答案:

答案 0 :(得分:1)

我现在通过使用像@Yakimych这样的单独ViewModel来解决我的问题。但是我没有复制EF模型中的所有属性,而只是引用它们。我的ViewModel看起来像这样:

public class NewOrderViewModel {
  public Order { get; set; }
  public List<Article> { get; set; }
}