gpt4 book ai didi

c# - Entity Framework 3.5 - 如何在不先从数据库加载行的情况下更新行

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

这是我当前更新数据库字段的代码

private void SaveUser(User user)
{
USER UserObj = _db.USERs.First(i => i.USER_ID == user.USER_ID);
UserObj.NAME = user.NAME;
_db.SaveChanges();
}

这很好用。但是,我想改变两件事

1) 我可以先跳过从数据库加载行吗?即这一行 USER UserObj = _db.USERs.First(i => i.USER_ID == user.USER_ID);

2) 如果有20个字段要更新,我如何一次设置所有的字段?或者我必须自己写所有 20 个作业?

谢谢

最佳答案

编辑 - 针对 EFv1 修改的示例 - 它回答了您的两个问题:

您正在寻找这个:

private void SaveUser(User user)
{
// Attach dummy entity - it must have only primary key property and EntityKey
// property assigned
_db.USERs.Attach(new User() { ... });
// Apply current values to dummy entity - this will mark the entity as modified
// and it will also mark all properties (except key and store generated) as modified
_db.ApplyPropertyChanges("UserSetName", user);
_db.SaveChanges();
}

EntityObject(如今大部分已过时)和 POCO(仅 EFv4)之间存在一些差异,其中 POCO 仅在标记为已修改时进行更新,但 EntityObject 不会.仅当属性与其原始状态不同或属性在 ObjectStateEntry 中手动设置为已修改时,它才会更新。

有选择地定义哪些属性必须更新与手动分配它们相同:

private void SaveUser(User user)
{
_db.USERs.Attach(user);
ObjectStateEntry entry = _db.ObjectStateManager.GetObjectStateEntry(user);
entry.SetModifiedProperty("PropertyName");
// set other properties
_db.SaveChanges();
}

顺便说一句。您听说过命名约定吗?

关于c# - Entity Framework 3.5 - 如何在不先从数据库加载行的情况下更新行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6889702/

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