Я получаю значение Null, как если бы запись была удалена другим пользователем в контроллере метода редактирования, вот мой код контроллера:
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Edit([Bind(Include = "CN_PeriodoId,CN_EmpresaId,CN_PeriodoDscr,CN_PeriodoComments,CN_PerEsId,LastUpdated,UserUpdated")] CN_EmpresaPeriodo cN_EmpresaPeriodo)
{
if (ModelState.IsValid)
{
try
{
//cN_EmpresaPeriodo.CN_EmpresaId = Empresa;
//cN_EmpresaPeriodo.UserUpdated = GetUserName();
//cN_EmpresaPeriodo.LastUpdated = GetDateFromServer();
db.Entry(cN_EmpresaPeriodo).State = EntityState.Modified;
db.SaveChanges();
return RedirectToAction("Index");
}
catch (DbUpdateConcurrencyException ex)
{
ModelState.AddModelError(string.Empty, "Se encontró que otro usuario modificó la información. "+ "verificar:" + ex.Message);
var entry = ex.Entries.Single();
/// Here im getting Null like if the record was deleted by other user
var databaseEntry = entry.GetDatabaseValues();
var clientValues = (CN_EmpresaPeriodo)entry.Entity;
if (databaseEntry == null)
{
ModelState.AddModelError(string.Empty,
"Unable to save changes. This Item was deleted by another user.");
}
else
{
var databaseValues = (CN_EmpresaPeriodo)databaseEntry.ToObject();
if (databaseValues.CN_EmpresaId != clientValues.CN_EmpresaId)
ModelState.AddModelError("CN_EmpresaId", "Current value: "
+ databaseValues.CN_EmpresaId);
if (databaseValues.CN_PeriodoDscr != clientValues.CN_PeriodoDscr)
ModelState.AddModelError("CN_PeriodoDscr", "Current value: "
+ databaseValues.CN_PeriodoDscr);
if (databaseValues.CN_PerEsId!= clientValues.CN_PerEsId)
ModelState.AddModelError("StartDate", "Current value: "
+ databaseValues.CN_PerEsId);
}
}
catch (Exception ex)
{
ModelState.AddModelError(string.Empty,"verificar:"+ ex.Message);
}
}
ViewBag.CN_PerEsId = new SelectList(db.CN_EmpresaPeriodoEstado, "CN_PerEsId", "CN_PerEsDscr", cN_EmpresaPeriodo.CN_PerEsId);
return View(cN_EmpresaPeriodo);
}
Вот моя структура модели
public class CN_EmpresaPeriodo
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
[DisplayName("Periodo Id")]
public long CN_PeriodoId { get; set; }
[Index(IsUnique = false)]
[DisplayName("Empresa")]
[Required(ErrorMessage = "Empresa debe ser valido")]
[ScaffoldColumn(false)]
public long CN_EmpresaId { get; set; } // igual como esta en el modelo
[Required(ErrorMessage = "Periodo debe ser valido")]
[DisplayName("Periodo")]
[StringLength(100)]
[MinLength(5)]
public string CN_PeriodoDscr { get; set; }
[DisplayName("Periodo Comentarios")]
[StringLength(300)]
public string CN_PeriodoComments { get; set; }
[Index(IsUnique = false)]
[DisplayName("Periodo Estatus")]
[DefaultValue(1)]
public int CN_PerEsId { get; set; } // igual como esta en el modelo
[ScaffoldColumn(false)]
[DataType(DataType.Date)]
[DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]
[DisplayName("Ultima actualizacion")]
public Nullable<DateTime> LastUpdated { get; set; }
// [HiddenInput(DisplayValue = false)]
[ScaffoldColumn(false)]
[DisplayName("Actualizado por")]
[StringLength(30)]
public string UserUpdated { get; set; }
//[Timestamp]
//public byte[] RowVersion { get; set; }
public CN_EmpresaPeriodoEstado CN_EmpresaPeriodoEstado { get; set; } // armo la relacion 1 to *
}
thisкласс является ссылочным вызовом из модели, с которой у меня проблема:
public class CN_EmpresaPeriodoEstado
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.None)]
[ScaffoldColumn(false)]
[DisplayName("Periodo Id")]
public int CN_PerEsId { get; set; }
[DisplayName("Estado")]
[StringLength(100)]
[Required(ErrorMessage = "Descripcion debe ser valido")]
public string CN_PerEsDscr { get; set; }
public static readonly byte Inactivo = 0;
public static readonly byte Activo = 1;
// Tablas de las que ponemos/participa (PUT) obtiene 1 a varios
public ICollection<CN_EmpresaPeriodo> CN_EmpresaPeriodo { get; set; }
}
Я проверяю возвращаемый объект "cN_EmpresaPeriodo" и действителен, я не могу понять, почему я получаю эту ошибку.
спасибо за помощь, друзья !!
PS: Все это произошло в режиме разработчика, я имею в виду, что я единственный, кто тестирует сеть.поэтому каждый раз, когда я редактирую элемент, «catch (DbUpdateConcurrencyException ex)» срабатывает, как если бы запись была удалена, но это не так, в чем может быть проблема?