我想在使用實體框架的MVC控制器方法中添加新記錄。 當我剛剛使用「InsertOrUpdate」審計類型重複。根據Entity Framework adding record with a related object的回答,我希望修復它漂亮的qiock。這是我現在所擁有的代碼:使用實體框架添加記錄重複其他對象
控制器:
if (ModelState.IsValid)
{
Audit newAudit = Factory.GetNew();
newAudit.Name = model.Name;
newAudit.Deadline = model.Deadline;
newAudit.AuditType = auditTypeRepository.Find(model.SelectedAuditTypeId);
Repository.InsertOrUpdate(newAudit);
Repository.Save();
return RedirectToAction(MVC.Audits.Details(newAudit.Id));
}
庫:
public override void InsertOrUpdate(Qdsa.WebApplications.AuditMaster.Data.Audit model)
{
if (model.Id == default(int))
{
// New entity
context.Audits.Add(model);
}
else
{
// Existing entity
model.ModifiedOn = DateTime.Now;
context.Entry(model).State = EntityState.Modified;
}
//If I leave out the code below the AuditType will be duplicated
if (model.AuditType != null)
{
context.Entry<AuditType>(model.AuditType).State = EntityState.Unchanged;
}
}
public virtual void Save()
{
context.SaveChanges();
}
所以我想我解決了這一問題。但是,AuditType也具有Child對象。現在這些小孩子被重複了。 添加具有已存在子對象的實體的正確方法是什麼? 因爲AuditType是必需的,我不能先保存它,然後更新它。有什麼建議麼?
UPDATE: 無論是AuditRepostory和AuditTypeRepository從BaseRepository繼承它具有上下文:
protected DBContext context = new DBContext();
public virtual T Find(int id)
{
return All.SingleOrDefault(s => s.Id == id);
}
我已經更新了我的問題。我必須執行具有上下文的單元工作並將其傳遞給存儲庫嗎? – amaters
感謝您的指針。你剛剛救了我的一天! – amaters