получить значение Null, как если бы запись была удалена другим пользователем в контроллере метода редактирования - PullRequest
0 голосов
/ 08 ноября 2018

Я получаю значение 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)» срабатывает, как если бы запись была удалена, но это не так, в чем может быть проблема?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...