【发布时间】:2013-01-08 12:21:00
【问题描述】:
我有一个小问题。
假设 context 是我的 EF 上下文,而 Respondent 是 EF 从数据库中生成的实际 EF Entity。
更新受访者的最短方法是什么?
public void UpdateRespondent(Respondent respondent)
{
var resp = context.Respondents.First(r => r.RespondentId == respondent.RespondentId);
// Now... do I have to copy all properties from the respondent into resp ??
// But respondent is actually the Respondent entity
// Can I just replace it somehow?
context.SaveChanges();
}
非常感谢。
更新1
感谢 nrodic,这段代码就像一个魅力:
public void UpdateRespondent(Respondent changed)
{
var respondent = db.Respondents.FirstOrDefault(r => r.RespondentId == changed.RespondentId);
db.Respondents.ApplyCurrentValues(changed);
db.SaveChanges();
}
一个问题 - 看起来我不需要第一行“var respondent =”!
知道为什么在许多示例中存在这条线吗?
谢谢。
更新2
嗯,看来我需要第一行。 否则它会在第二行引发异常 (db.Respondents.ApplyCurrentValues(changed);)
具有与所提供对象的键匹配的键的对象可以 在 ObjectStateManager 中找不到。验证的关键值 提供的对象与对象的键值匹配 必须应用更改。
【问题讨论】:
-
谢谢,但为什么我需要一些 3rd 方库?两者都是同一个实体。受访者是实际的 EF 实体,它不是 VewModel 或任何自定义事物。它是数据库表的 EF 实体。我认为直接一行代码替换可以进行更新。
-
是否有直接 EF 注入,因为 resp 和响应者是一回事。
-
看来我需要它 :) 请查看更新后的帖子