gpt4 book ai didi

entity-framework - 首先更新 Entity Framework 代码中的记录的单个属性

转载 作者:行者123 更新时间:2023-12-03 13:43:28 26 4
gpt4 key购买 nike

如何在不首先检索记录的情况下更新记录的单个属性?
我在EF Code First 4.1的背景下问

说我有一个类User,映射到Database中的表Users:

class User
{
public int Id {get;set;}
[Required]
public string Name {get;set;}
public DateTime LastActivity {get;set;}
...
}


现在,我要更新用户的LastActivity。我有用户名。通过查询用户记录,将新值设置为LastActivity,然后调用SaveChanges(),我可以轻松地做到这一点。但这将导致冗余查询。

我通过使用Attach方法来解决。但是由于EF如果Name为null则会在Name上引发验证异常,因此我将Name设置为随机字符串(不会更新回DB)。但这似乎不是一个很好的解决方案:

using (var entities = new MyEntities())
{
User u = new User {Id = id, Name="this wont be updated" };
entities.Users.Attach(u);
u.LastActivity = DateTime.Now;
entities.SaveChanges();
}


如果有人可以为我提供更好的解决方案,我将非常感激。并请原谅我没有任何错误,因为这是我第一次提出有关SO的问题。

最佳答案

这是验证实施的问题。验证只能验证整个实体。它不会仅验证修改后的属性。因此,在要使用不完整的虚拟对象的情况下,应关闭验证:

using (var entities = new MyEntities())
{
entities.Configuration.ValidateOnSaveEnabled = false;

User u = new User {Id = id, LastActivity = DateTime.Now };
entities.Users.Attach(u);
entities.Entry(user).Property(u => u.LastActivity).IsModified = true;
entities.SaveChanges();
}


如果您要使用相同的上下文来更新虚拟对象和用于更新应使用验证的整个实体,那么这显然是一个问题。验证发生在 SaveChanges中,因此您无法说出应验证哪些对象,而不必验证。

关于entity-framework - 首先更新 Entity Framework 代码中的记录的单个属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5564727/

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