我一整天都在和这个斗争,但我还是失败了。
我可以简化问题如下: 我有报告和报告有表格。我有每个的实体模型。他们有Guid id's,如下所示。
我正在尝试获取单个视图,我可以在其中创建报告和表单。作为最终目标,我希望能够添加多个表单,但只有一个表现很棒。我的控制器如下:
// GET: /AllInOne/Create
public ActionResult Create()
{
ViewBag.PossibleReportBases = reportBaseRepository.All;
ViewBag.PossibleCategories = categoryRepository.All;
var model = new Report {FromDate = DateTime.Now};
model.Forms.Add(new Form());
return View(model);
}
// POST: /AllInOne/Create
[HttpPost]
public ActionResult Create(Report report)
{
if (ModelState.IsValid) {
reportRepository.InsertOrUpdate(report);
reportRepository.Save();
return RedirectToAction("Index");
}
else
{
ViewBag.PossibleReportBases = reportBaseRepository.All;
ViewBag.PossibleCategories = categoryRepository.All;
return View();
}
}
存储库代码如下所示:
public void InsertOrUpdate(Report report)
{
if (report.Id == default(System.Guid)) {
// New entity
report.Id = Guid.NewGuid();
context.Reports.AddObject(report);
} else {
// Existing entity
context.Reports.Attach(report);
context.ObjectStateManager.ChangeObjectState(report, EntityState.Modified);
}
}
在一个阶段,绑定给了我这个错误: EntityCollection已经初始化。只应调用InitializeRelatedCollection方法在对象图的反序列化期间初始化新的EntityCollection。
我为这些观点尝试了很多东西,但没有一个有效。
请帮忙。
答案 0 :(得分:0)
我不认为你需要打扰附加。如果您从上下文中选择了报告,则表明它已被跟踪。您可以像这样简化您的存储库
public void InsertOrUpdate(Report report)
{
// i prefer Guid.Empty but no big deal
if (report.Id == default(System.Guid)) {
// New entity
report.Id = Guid.NewGuid();
context.Reports.AddObject(report);
}
context.SaveChanges();
}