This is my Master Table
[Key]
public int ID { get; set; }
[Required]
public string Description { get; set; }
[Display(Name = "Discontinue")]
public bool IsDeleted { get; set; }
[Required]
[Display(Name = "Created By")]
public virtual ApplicationUser CreatedById { get; set; }
//[Required]
[Display(Name = "Created By DateTime")]
public DateTime? CreatedByDateTime { get; set; }
//[Required]
[Display(Name = "Modified By")]
public virtual ApplicationUser ModifiedById { get; set; }
//[Required]
[Display(Name = "Modified By Datetime")]
public DateTime? ModifiedByDatetime { get; set; }
В моем главном контроллере у меня есть метод для создания, и этот метод будет сохранять CREATEDBYID = USERID И ТАКЖЕ CREATEDBTDATETIME
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create([Bind(Include = "ID,Description,IsDeleted,CreatedByDateTime,ModifiedByDatetime")] Master master)
{
ModelState["CreatedById"].Errors.Clear();
if (ModelState.IsValid)
{
master.CreatedById = db.Users.Find(User.Identity.GetUserId());
master.CreatedByDateTime = DateTime.Now;
db.Master.Add(master);
db.SaveChanges();
return RedirectToAction("Index");
}
return View(master);
}
И второй метод редактирования, этот метод получит идентификатор пользователя, который изменил запись, и сохранит ее в модифицированном виде
.
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Edit([Bind(Include = "ID,Description,CreatedByDateTime,CreatedById,IsDeleted")] Master master)
{
//var count = ViewData.ModelState.Values.Where(v => v.
if (ModelState.IsValid)
{
master.ModifiedByDatetime = DateTime.Now;
master.ModifiedById = db.Users.Find(User.Identity.GetUserId());
db.Entry(master).State = EntityState.Modified;
db.SaveChanges();
return RedirectToAction("Index");
}
return View(master);
}
На сайте я могу изменить описание и удалено поле, остальные столбцы скрыты, но когда я нажимаю на кнопку сохранить, эта ошибка показывает
System.InvalidOperationException
HResult = 0x80131509
Сообщение = Присоединение объекта типа «CleaningSupplies.Database.Models.ApplicationUser» завершилось неудачно, поскольку другой объект того же типа уже имеет то же значение первичного ключа. Это может произойти при использовании метода «Присоединить» или установке состояния объекта на «Неизменено» или «Изменено», если какие-либо объекты в графе имеют конфликтующие значения ключей. Это может быть потому, что некоторые объекты являются новыми и еще не получили сгенерированные базой данных значения ключей. В этом случае используйте метод «Добавить» или состояние объекта «Добавлено» для отслеживания графика, а затем установите состояние не новых объектов на «Неизмененные» или «Измененные», в зависимости от ситуации.
Источник = EntityFramework