【发布时间】:2018-10-14 05:01:46
【问题描述】:
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 AND ALSO 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);
}
还有第二种编辑方法,这个方法会获取修改记录的人的userId,并保存在modifiedbyid中
[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 H结果=0x80131509 Message=附加类型为“CleaningSupplies.Database.Models.ApplicationUser”的实体失败,因为同一类型的另一个实体已经具有相同的主键值。如果图中的任何实体具有冲突的键值,则在使用“附加”方法或将实体的状态设置为“未更改”或“已修改”时,可能会发生这种情况。这可能是因为某些实体是新实体,尚未收到数据库生成的键值。在这种情况下,使用“添加”方法或“添加”实体状态来跟踪图形,然后将非新实体的状态适当地设置为“未更改”或“已修改”。 来源=实体框架
【问题讨论】:
-
能否提供
Master实体查询在GET方法中的使用方式?有可能您在 GET 方法中查询Master实体,然后忘记使用EntityState.Detached、AsNoTracking()或只是在保存前重新附加实体。
标签: c# entity-framework asp.net-mvc-5