我是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中点击继续,它将完成保存订单 - 所以我的问题是如何以可靠的方式解决这个问题。
提前致谢并抱歉这个长篇故事:)
答案 0 :(得分:1)
我现在通过使用像@Yakimych这样的单独ViewModel来解决我的问题。但是我没有复制EF模型中的所有属性,而只是引用它们。我的ViewModel看起来像这样:
public class NewOrderViewModel {
public Order { get; set; }
public List<Article> { get; set; }
}