LINQ是否允许Upsert类型的操作,或用于更新现有记录?我有以下代码,该代码从列表中获取“记录”,更新它的某些部分,然后删除原始记录,然后添加回此更新的记录:
. . .
Student student = LINQ2ObjectsCode.GetStudentForId(ah.StudentID_FK);
// Update several members of the Students list...
student.WeekOfLastAssignment = _currentWeek;
int nextTalkTypeId = AYttFMConstsAndUtils.GetNextTalkIDForBrothers(ah.StudentID_FK, 1);
student.RecommendedNextTalkTypeID = nextTalkTypeId;
student.NextCounselPoint = LINQ2ObjectsCode.GetNextCounselPoint(nextTalkTypeId, student.NextCounselPoint);
// ...then update that record by first deleting the old one...
AYttFMConstsAndUtils.StudentsList.RemoveAll(x => x.StudentID == ah.StudentID_FK);
// ...and then adding back the updated one:
AYttFMConstsAndUtils.StudentsList.Add(student);
. . .
public static Student GetStudentForId(int _studentId)
{
return AYttFMConstsAndUtils.StudentsList.SingleOrDefault(
i => i.StudentID.Equals(_studentId));
}
...但是我不知道这是否是首选方法。有没有一种方法可以更新现有记录,而不是销毁记录并将其替换为新版本?我想有,但是我不知道它是如何令人费解的,它到底是更好还是只是有所不同。我将有几种类似的方法,但是我不想多次做“错”的事情。
注意:数据不是来自数据库;而是来自数据库。相反,它存储在json文件中。
您无需再次删除和添加实体。
通常,如果列表是本地列表,则对象是按引用的。因此,您可以查询对象,并就地修改其属性,并且已经更新了真实对象的字段。
对于LINQ2SQL或EF或ORM实体,每当您获取一条记录时,上下文管理器就会跟踪该实体的状态。您可以修改其属性,并在上下文中执行SubmitChanges()或SaveChanges(),记录将自动更新。
请注意,您需要处于上下文范围内才能进行访存,修改某些属性并保存更改。如果在获取实体后丢失了上下文,则仍然可以轻松地修改实体,只需要再次附加对象并保存上下文即可。
让我知道您是否需要这样做的LINQ2SQL或EF实例。(附加实体)
例如
using (var context = new YourDbContext())
{
Student student = LINQ2ObjectsCode.GetStudentForId(context, ah.StudentID_FK);
// Update several members of the Students list...
student.WeekOfLastAssignment = _currentWeek;
int nextTalkTypeId =
AYttFMConstsAndUtils.GetNextTalkIDForBrothers(ah.StudentID_FK, 1);
student.RecommendedNextTalkTypeID = nextTalkTypeId;
student.NextCounselPoint = LINQ2ObjectsCode.GetNextCounselPoint(nextTalkTypeId,
student.NextCounselPoint);
context.SaveChanges(); // ef
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句