我有个小问题,我需要你的帮助。我正在使用Entity Framework进行数据库处理,并且我想要更新此数据库中的数据集。
我有一个具有所有更改的EntityObject,并希望能够用现有对象更新此对象。
我使用以下代码来更新数据:
IQueryable<Competitors> getCompetitor = DatabaseObject.Competitors.Where(SelectOnly => SelectOnly.competitorID == competitorObject.competitorID);
Competitors competitor = getCompetitor.First();
competitor = competitorObject;
DatabaseObject.SaveChanges();但这并不管用。如何更新数据库中的日期?
发布于 2012-09-18 17:09:21
假设您的competitorObject是Competitors类型(competitor = competitorObject),您必须将其附加到上下文,将其标记为已修改,然后保存更改:
DatabaseObject.Competitors.Attach(competitorObject);
DatabaseObject.Entry(competitorObject).State = EntityState.Modified;
DatabaseObject.SaveChanges();在您的情况下,不需要检索源对象,但如果不附加,上下文将对您更新的对象一无所知。
如果您使用的是ObjectContext应用程序接口而不是DbContext应用程序接口,则将对象标记为已修改的代码段可能会略有不同:
DatabaseObject.ObjectStateManager.GetObjectStateEntry(competitorObject).SetModified();发布于 2012-09-18 17:39:34
要使代码正常工作,您需要对代码进行的唯一更改是更新获取的实体上的至少一个属性。更新的是引用,而不是属性值,如下所示:
IQueryable<Competitors> getCompetitor = DatabaseObject.Competitors.Where(SelectOnly => SelectOnly.competitorID == competitorObject.competitorID);
Competitors competitor = getCompetitor.First();
competitor.Name = competitorObject.Name;
competitor.Contact = competitorObject.Contact;
DatabaseObject.SaveChanges();或者,正如丹尼斯所说,您可以将CompetitorObject附加到上下文并将其标记为已修改。这样做将用CompetitorObject的值覆盖现有Competitors记录的所有属性。
https://stackoverflow.com/questions/12473681
复制相似问题