Usuário com melhor resposta
Concurrency Mode Code First

Pergunta
-
Galera, estou precisando implementar Concurrency Mode com o Code First, estou usando o EF 5.0, porém como o meu projeto é Web, não estou conseguindo fazer funcionar direito.
o que esta acontecendo, no sistema eu abro o mesmo cadastro em dois navegadores diferentes em um deles faço a alteração e salvo, no outro só salvo sobrescrevendo as alterações salvas no outro navegador, mesmo com as colunas marcadas com o atributo ConcurrencyCheck.
qual seria a melhor estratégia para implementar Concorrência em um projeto web?
Respostas
-
Boa noite,
Altere o seu método de edição para este:
[HttpPost] [ValidateAntiForgeryToken] public ActionResult Edit(TesteEntity testeentity) { if (ModelState.IsValid) { db.Entry(testeentity).State = EntityState.Modified; DbPropertyValues dbPropertyValues = db.Entry(testeentity).GetDatabaseValues(); db.Entry(testeentity).Property(b => b.Descricao).OriginalValue = dbPropertyValues["Descricao"].ToString(); db.SaveChanges(); return RedirectToAction("Index"); } return View(testeentity); }
Att,
LeandroSe foi útil, marque como útil ou como resposta.
- Sugerido como Resposta Leandro Tozetto quarta-feira, 1 de maio de 2013 01:19
- Marcado como Resposta Pablotdv quarta-feira, 1 de maio de 2013 01:35
Todas as Respostas
-
aqui tem um exemplo do que estou tentando fazer
public class TesteEntity { [Key] [DatabaseGenerated(DatabaseGeneratedOption.Identity)] public int TesteId { get; set; } [ConcurrencyCheck()] public string Descricao { get; set; } } public class TesteContext : DbContext { public DbSet<TesteEntity> TesteEntity { get; set; } protected override void OnModelCreating(DbModelBuilder modelBuilder) { Database.SetInitializer(new CreateDatabaseIfNotExists<TesteContext>()); base.OnModelCreating(modelBuilder); } } public class HomeController : Controller { private TesteContext db = new TesteContext(); // // GET: /Home/ public ActionResult Index() { return View(db.TesteEntity.ToList()); } // // GET: /Home/Details/5 public ActionResult Details(int id = 0) { TesteEntity testeentity = db.TesteEntity.Find(id); if (testeentity == null) { return HttpNotFound(); } return View(testeentity); } // // GET: /Home/Create public ActionResult Create() { return View(); } // // POST: /Home/Create [HttpPost] [ValidateAntiForgeryToken] public ActionResult Create(TesteEntity testeentity) { if (ModelState.IsValid) { db.TesteEntity.Add(testeentity); db.SaveChanges(); return RedirectToAction("Index"); } return View(testeentity); } // // GET: /Home/Edit/5 public ActionResult Edit(int id = 0) { TesteEntity testeentity = db.TesteEntity.Find(id); if (testeentity == null) { return HttpNotFound(); } return View(testeentity); } // // POST: /Home/Edit/5 [HttpPost] [ValidateAntiForgeryToken] public ActionResult Edit(TesteEntity testeentity) { if (ModelState.IsValid) { db.Entry<TesteEntity>(testeentity).State = EntityState.Modified; db.SaveChanges(); return RedirectToAction("Index"); } return View(testeentity); } // // GET: /Home/Delete/5 public ActionResult Delete(int id = 0) { TesteEntity testeentity = db.TesteEntity.Find(id); if (testeentity == null) { return HttpNotFound(); } return View(testeentity); } // // POST: /Home/Delete/5 [HttpPost, ActionName("Delete")] [ValidateAntiForgeryToken] public ActionResult DeleteConfirmed(int id) { TesteEntity testeentity = db.TesteEntity.Find(id); db.TesteEntity.Remove(testeentity); db.SaveChanges(); return RedirectToAction("Index"); } protected override void Dispose(bool disposing) { db.Dispose(); base.Dispose(disposing); } }
-
Usando esse exemplo, estou tendo o seguinte erro quando dou um Edit
A instrução de atualização, inserção ou exclusão de repositório afetou um número inesperado de linhas (0). As entidades podem ter sido modificadas ou excluídas após o carregamento. Atualize as entradas do ObjectStateManager.
Link pra quem quiser baixar o exemplo
- Editado Pablotdv terça-feira, 30 de abril de 2013 23:08
-
Boa noite,
Altere o seu método de edição para este:
[HttpPost] [ValidateAntiForgeryToken] public ActionResult Edit(TesteEntity testeentity) { if (ModelState.IsValid) { db.Entry(testeentity).State = EntityState.Modified; DbPropertyValues dbPropertyValues = db.Entry(testeentity).GetDatabaseValues(); db.Entry(testeentity).Property(b => b.Descricao).OriginalValue = dbPropertyValues["Descricao"].ToString(); db.SaveChanges(); return RedirectToAction("Index"); } return View(testeentity); }
Att,
LeandroSe foi útil, marque como útil ou como resposta.
- Sugerido como Resposta Leandro Tozetto quarta-feira, 1 de maio de 2013 01:19
- Marcado como Resposta Pablotdv quarta-feira, 1 de maio de 2013 01:35
-
-
quem tiver interesse pode ler um pequeno artigo que escrevi.