我是ASP.NET MVC的新手,希望创建一个小订单管理工具。我的数据库包含表订单和文章(和其他几个),并且我从我的数据库生成了一个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对象正在直接绑定到一个视图(读的地方没有做到这一点,使用查看模型,但不真正知道该视图模型应该看起来像什么)
我的视图包含订单表单以及文章表单(因为我想创建一个订单和文章在同一时间而不是单独的)。我用这些greate EditorFor方法来做到这一点。
而现在我的问题:如果我点击提交按钮,应用程序,一旦崩溃,因为它涉及到HttpPost创建方法与此错误消息(映射订单时):
错误信息: EntityCollection 已经初始化。应该只调用 InitializeRelatedCollection方法 来初始化 新的EntityCollection,该对象图的反序列化过程为 。
如果我打在VS2010中继续,它会完成保存命令 - 所以我的问题是如何以可靠的方式解决这个问题。
在此先感谢和抱歉的是很长的故事:)
我的建议是不要使用EF对象模型,并创建一个'ViewModel'代替(如你在你的问题提)。 'ViewModel'应该包含你要在视图中显示/编辑的所有字段,所以最初你可以创建一个实体对象的副本并将它们命名为'OrderViewModel'和'ArticleViewModel',而'OrderViewModel'将包含一个“ArticleViewModels”列表。在'Create'操作中,您只需确保将所有数据从视图模型复制到EF对象中(此过程可以自动化 - 请参阅Automapper)。 – Yakimych 2011-05-27 12:55:04