I am trying to add a record to a database from a ViewModel using ASP MVC. The code will allow only certain models to be added. Others throw the exception:
Store update, insert, or delete statement affected an unexpected number of rows (0). Entities may have been modified or deleted since entities were loaded. Refresh ObjectStateManager entries.
View Model:
public class FamilyApplicationViewModel
{
public FamilyApplicationViewModel()
{
}
public int ID { get; set; }
public Family Family { get; set; }
public FamilyApp FamilyApp { get; set; }
public List<FamilyIncome> FamilyIncomes { get; set; }
public List<FamilyMember> FamilyMembers { get; set;}
}
get Controller:
public ActionResult Create()
{
return View();
}
this Controller works:
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create(FamilyApplicationViewModel model)
{
var user = "Sam";
model.Family.CreatedBy = user;
model.Family.ModifiedBy = user;
//all other props set in view
var fam = db.Families.Add(model.Family);
db.SaveChanges();
return RedirectToAction("Index");
}
this Controller does not:
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create(FamilyApplicationViewModel model)
{
var user = "Sam";
model.Family.CreatedBy = user;
model.Family.ModifiedBy = user;
var app = new FamilyApp();
app.AppYear = DateTime.Now.Year;
app.ModifiedBy = user;
app.CreatedBy = user;
// other family app props set
model.Family.FamilyApps.Add(app);
db.Families.Add(model.Family);
db.SaveChanges();
}
this Controller does not:
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create(FamilyApplicationViewModel model)
{
var user = "Sam";
model.Family.CreatedBy = user;
model.Family.ModifiedBy = user;
var fam = db.Families.Add(model.Family);
db.SaveChanges();
model.FamilyApp.AppYear = DateTime.Now.Year;
model.FamilyApp.ModifiedBy = user;
model.FamilyApp.CreatedBy = user;
var app = model.FamilyApp;
model.FamilyApp.FamilyId = fam.FamilyId;
db.FamilyApps.Add(app);
db.SaveChanges(); ///////Exception Here///////
}
this Controller does not:
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create(FamilyApplicationViewModel model)
{
var user = "Sam";
model.Family.CreatedBy = user;
model.Family.ModifiedBy = user;
model.FamilyApp.AppYear = DateTime.Now.Year;
model.FamilyApp.ModifiedBy = user;
model.FamilyApp.CreatedBy = user;
var app = model.FamilyApp;
model.Family.FamilyApps.Add(app);
db.Families.Add(model.Family);
db.SaveChanges(); ///////Exception Here///////
}
this Controller does not:
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create(FamilyApplicationViewModel model)
{
var user = "Sam";
model.FamilyApp.AppYear = DateTime.Now.Year;
model.FamilyApp.ModifiedBy = user;
model.FamilyApp.CreatedBy = user;
model.FamilyApp.FamilyId = 1; //this does exist in db
db.FamilyApps.Add(model.FamilyApp);
db.SaveChanges(); ///////Exception Here///////
}
this Controller does not:
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create(FamilyApplicationViewModel model)
{
var user = "Sam";
model.FamilyApp.AppYear = DateTime.Now.Year;
model.FamilyApp.ModifiedBy = user;
model.FamilyApp.CreatedBy = user;
model.FamilyApp.FamilyId = 1; //this does exist in db
db.FamilyApps.Add(model.FamilyApp);
try
{
db.SaveChanges();
}
catch
{
((IObjectContextAdapter)db).ObjectContext.Refresh(RefreshMode.ClientWins, db.Families);
((IObjectContextAdapter)db).ObjectContext.Refresh(RefreshMode.ClientWins, db.FamilyApps);
db.SaveChanges(); ///////Exception Here///////
}
}
I also saw another Refresh method shown as db.Refresh
but it is not available to me.
I have look into:
- Entity Framework: "Store update, insert, or delete statement affected an unexpected number of rows (0)."
- Store update, insert, or delete statement affected an unexpected number of rows (0) EntityFramework
- Solution for: Store update, insert, or delete statement affected an unexpected number of rows (0)
None of the links helped. I have tried adding hidden fields to my view like so.
@Html.HiddenFor(m => m.ID);
@Html.HiddenFor(m => m.Family.FamilyId);
@Html.HiddenFor(m => m.FamilyApp.FamilyAppId);
@for (int i = 0; i < 10; i++)
{
@Html.HiddenFor(m => m.FamilyIncomes[i].FamilyIncomeId);
@Html.HiddenFor(m => m.FamilyMembers[i].FamilyMemberId);
}
Does anyone know how to fix this exception?