Riz*_*Riz 3 c# sql-server entity-framework
这是我当前更新数据库中字段的代码
private void SaveUser(User user)
{
USER UserObj = _db.USERs.First(i => i.USER_ID == user.USER_ID);
UserObj.NAME = user.NAME;
_db.SaveChanges();
}
Run Code Online (Sandbox Code Playgroud)
这很好用.但是,我想改变两件事
1)我可以先跳过从DB加载行吗?即这条线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();
}
Run Code Online (Sandbox Code Playgroud)
EntityObjects(今天大部分已过时)和POCO(仅EFv4)之间存在一些差异,如果POCO标记为已修改但未更新,则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();
}
Run Code Online (Sandbox Code Playgroud)
顺便说一句.你听说过命名惯例吗?
| 归档时间: |
|
| 查看次数: |
5142 次 |
| 最近记录: |