gpt4 book ai didi

c# - 防止 Entity Framework 更新属性

转载 作者:行者123 更新时间:2023-11-30 20:33:02 24 4
gpt4 key购买 nike

防止我的 CreatedOn 属性被覆盖的最佳方法是什么,请参见下文:

public class MyObject
{
...
public DateTime? CreatedOn { get; set; }
...
}

我知道我可以将它传递给 View 并使用隐藏对象,但我不想依赖它。

我的更新方法是这样的:

var originalObject = db.Object.Find(model.objectId);

if (originalObject != null)
{
...
db.Entry(originalObject).CurrentValues.SetValues(model);
db.SaveChanges();
}

我试图阻止单独读取和设置每个属性。此外,我没有在 Bind 列表中列出 CreatedOn 方法,因此数据库中的值被 NULL 覆盖或抛出它不能为 NULL 的错误,具体取决于我在中设置属性的方式该模型。

最佳答案

您可以使用属性 IsModified 来定义特定实体属性是否被修改:

db.Entry(originalObject).CurrentValues.SetValues(model);
db.Entry(originalObject).Property(o => o.CreatedOn).IsModified = false;
db.SaveChanges();

当设置为false时,列不会在数据库中更新。

如您所见,要排除更多的属性,就需要编写更多的代码。当添加一些新属性时,很容易忘记排除。因此,我建议在适当的时候使用 View 模型。使用 View 模型时,您使用的是仅具有对您的特定 View 有意义的属性的自定义对象,而不是实体。 SO answer 涵盖了一个很大的主题,但您可以阅读 good introduction进入主题。

关于c# - 防止 Entity Framework 更新属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40712830/

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