如果记录已被其他用户在编辑方法控制器中删除,我会得到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 *
}
此类是我有问题的模型的参考调用:
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)”都会触发,例如是否删除了记录,但并非如此,这可能是什么问题?