gpt4 book ai didi

asp.net-mvc - 使用 DBContext Entry.OriginalValues 和 Entry.NewValues 记录更改的值

转载 作者:行者123 更新时间:2023-12-02 01:17:47 26 4
gpt4 key购买 nike

我有一个文档库站点,我想在编辑文档对象时发送一封包含更改摘要的电子邮件。

数据库交互是使用 DBContext 的 Code First Entities Framework

这是我目前所拥有的:

    [HttpPost]
public ActionResult Edit(Document document, bool sendEmail, string commentsTextBox)
{

if (ModelState.IsValid)
{
docsDB.Entry(document).State = EntityState.Modified;

foreach (string propertyName in docsDB.Entry(document).OriginalValues.PropertyNames)
{
var OriginalValue = docsDB.Entry(document).OriginalValues.GetValue<object>(propertyName);
var NewValue = docsDB.Entry(document).CurrentValues.GetValue<object>(propertyName);
if (!OriginalValue.Equals(NewValue))
{
//capture the changes
}
}

docsDB.SaveChanges();
if (sendEmail)
{
//sends email
}
return RedirectToAction("Index");

}

但是,OriginalValue 和 NewValue 总是相同的——更新的值。

除了像写入文件这样的骇人听闻的东西之外,还有什么方法可以在 POST 之前捕获文档的状态吗?

最佳答案

为了将更新后的属性与数据库中的值进行比较,您必须从数据库中重新加载文档。你可以这样试试:

[HttpPost]
public ActionResult Edit(Document document, bool sendEmail,
string commentsTextBox)
{
if (ModelState.IsValid)
{
var documentInDB = docsDB.Documents.Single(d => d.Id == document.Id);

docsDB.Entry(documentInDB).CurrentValues.SetValues(document);

foreach (string propertyName in docsDB.Entry(documentInDB)
.OriginalValues.PropertyNames)
{
var OriginalValue = docsDB.Entry(documentInDB)
.OriginalValues.GetValue<object>(propertyName);
var NewValue = docsDB.Entry(documentInDB)
.CurrentValues.GetValue<object>(propertyName);

if (!OriginalValue.Equals(NewValue))
{
//capture the changes
}
}

docsDB.SaveChanges();
if (sendEmail)
{
//sends email
}
return RedirectToAction("Index");
}
// ...
}

关于asp.net-mvc - 使用 DBContext Entry.OriginalValues 和 Entry.NewValues 记录更改的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9135340/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com