gpt4 book ai didi

c# - 如何检查修改了哪些属性/条目,哪些不在 EF 6 中编辑记录

转载 作者:行者123 更新时间:2023-11-30 16:06:07 29 4
gpt4 key购买 nike

我正在使用 EF 6 开发 MVC 5 应用程序。自动生成的编辑 POST 方法是:

public ActionResult Edit([Bind(Include = "Id,Name,Address,Phone,SSNo,D1")] ABC abc)
{
if (ModelState.IsValid)
{
db.Entry(abc).State = EntityState.Modified;
db.SaveChanges();
}
return View(abc);
}

是否有任何程序/方法可以让我知道哪些条目被修改以及这些条目的原始值是多少。我试过this中标记为答案的方法问题,但尽管进行了更改,但它没有得到任何更改,即循环不迭代。

我的代码是:

 public ActionResult Edit([Bind(Include = "Id,Name,Address,Phone,SSNo,D1")] ABC abc)
{
if (ModelState.IsValid)
{
db.ABCs.Attach(abc);
var myObjectState = ((IObjectContextAdapter)db).ObjectContext.ObjectStateManager.GetObjectStateEntry(abc);
var modifiedProperties = myObjectState.GetModifiedProperties();
foreach (var propName in modifiedProperties)
{
Console.WriteLine("Property {0} changed from {1} to {2}",
propName,
myObjectState.OriginalValues[propName],
myObjectState.CurrentValues[propName]);
}
Console.ReadKey();
db.Entry(abc).State = EntityState.Modified;
db.SaveChanges();
return Json(abc);
}
return View(abc);
}

ABC 模型包含许多方法参数中未提及的值,但我只传递那些可以编辑的值

我想做的是在我的数据库中维护对文档所做的所有更改的日志。我只想在日志中包含更改和修改前的原始值,而不是完整记录。

我怎样才能得到这个?

最佳答案

我为你实现了这个扩展方法:

namespace YourProject.Extensions
{
public static class ModelExtensions
{
public static IEnumerable<KeyValuePair<string, object>> ModifiedValues<T>(this T obj, T modifiedObject)
{
foreach (var property in typeof(T).GetProperties().Where(p => !p.GetGetMethod().IsVirtual))
{
if (property.GetValue(obj).ToString() != property.GetValue(modifiedObject).ToString())
{
yield return new KeyValuePair<string, object>(property.Name, property.GetValue(modifiedObject));
}
}
}
}
}

它既不是最快的也不是最有效的,但在我的测试中有效。

使用:

var originalEntity = await db.Entities.AsNoTracking().FirstOrDefaultAsync(e => e.EntityId == modifiedEntity.EntityId);
var modifiedValues = originalEntity.ModifiedValues<MyEntity>(modifiedEntity).ToList();

关于c# - 如何检查修改了哪些属性/条目,哪些不在 EF 6 中编辑记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32737975/

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