问题描述
我在编辑方法“问题”中的传输参数有问题。
在问题中,CreatedDate 和 UpdatedDate 始终为 {01.01.0001 00:00:00}。
参数 Id、Title 和 Description 始终正确。
我的控制器:
public ActionResult Edit([Bind(Include = "Id,Title,Description")] Issue issue)
{
if (ModelState.IsValid)
{
db.Entry(issue).State = EntityState.Modified;
db.SaveChanges();
return RedirectToAction("Index");
}
return View(issue);
}
我的模型:
public class Issue : BaseEntity
{
public int Id { get; set; }
[required(ErrorMessage = "required")]
public string Title { get; set; }
[AllowHtml]
[required(ErrorMessage = "required")]
[DataType(DataType.MultilineText)]
public string Description { get; set; }
}
public class BaseEntity
{
public DateTime CreatedDate { get; set; }
public DateTime UpdatedDate { get; set; }
}
不幸的是,我无法从“问题”参数的来源进行调试。
Edit 方法中的传输参数“Issue issue”从何而来,为什么所有 DateTimes 总是 {01.01.0001 00:00:00}?
当我第一次创建问题实体时,我在 SaveChanges() 方法中添加了 DateTimme,并在我的 DBContext 中进行了以下修改:
public override int SaveChanges()
{
var entries = ChangeTracker
.Entries()
.Where(e => e.Entity is BaseEntity && (
e.State == EntityState.Added
|| e.State == EntityState.Modified));
foreach (var entityEntry in entries)
{
((BaseEntity)entityEntry.Entity).UpdatedDate = DateTime.UtcNow;
if (entityEntry.State == EntityState.Added)
{
((BaseEntity)entityEntry.Entity).CreatedDate = DateTime.UtcNow;
}
}
return base.SaveChanges();
}
并且 SaveChanges() 工作没有问题。当我第一次创建问题实体时,DateTime 具有正确的值,我也可以在详细信息视图中看到它。
解决方法
将您的编辑代码更改为此
var exist = d.Set<Issue>().FindAsync(issue.Id);
if (exist == null)
{
//ErrorMessage = "Can't find item to update";
}
else{
db.Entry(exist).CurrentValues.SetValues(issue);
var result = await db.SaveChanges(); // result should be > 0
}