gpt4 book ai didi

entity-framework - 防止更新 Entity Framework 中特定字段的最佳方法是什么

转载 作者:行者123 更新时间:2023-12-03 07:36:18 25 4
gpt4 key购买 nike

我正在使用 Entity Framework 为我的后端逻辑编写一个带有 MVC 的 Web 应用程序。我的问题是我有一个实体,其中某些字段在更新时永远不应该更改。我不太确定解决这个问题的最佳方法是什么。我的应用程序中将处理大量数据,因此我不能仅仅修改解决方案。

是否可以在 POCO 实体中将字段定义为只读?或者我应该编写 Entity Framework 扩展类来验证所有更新。可以在EF和实际数据库的映射文件中完成吗?

我对 EF 比较陌生,所以希望你们中的一些人能够给我一些指导!

谢谢!

最佳答案

如果您使用 .NET 4.5 和 EF 5(即 MVC 4),则只需在相关的各个属性上设置 IsModified = false 即可。这样做的好处是可以接近默认的开箱即用的 MVC 约定。

例如,如果您有一个在更新记录时不应触及的 CreatedBy 字段,请在 Controller 中使用以下内容:

[HttpPost]
public ActionResult Edit(Response response)
{
if (ModelState.IsValid)
{
db.Entry(response).State = EntityState.Modified;
db.Entry(response).Property(p => p.CreatedBy).IsModified = false;
db.SaveChanges();
return RedirectToAction("Index");
}
return View(response);
}

请注意,IsModified 行是默认 Controller 操作的唯一更改。

您必须将此行放在设置 .State = EntityState.Modified 之后(这适用于整个记录并将记录添加到数据库上下文中)。

效果是 EF 不会在 SQL UPDATE 语句中包含此列。

我仍然(非常)震惊,没有类似于 [ReadOnly] 的 [InsertOnly] 或 [UpdateOnly] 属性。这似乎是 MVC 团队的一个重大疏忽。我错过了什么吗?

我对这个解决方案并不完全满意,因为它是一个 hack:你告诉 EF 没有进行任何更改,而你真正想说的是“放手”。这也意味着您必须在任何可以更新字段的地方使用此代码。最好在类属性上添加一个属性。

(很抱歉发布到较旧的线程,但我在其他地方没有看到此解决方案。ViewModel 很强大,但需要做很多工作,而 EF 应该让事情变得更容易,而不是更困难......)

关于entity-framework - 防止更新 Entity Framework 中特定字段的最佳方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11608905/

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