1

我有一个小问题,我需要你的帮助。我正在使用实体框架进行数据库处理,并且我想更新此数据库中的数据集。

我有一个包含所有更改的 EntityObject,并希望能够使用现有对象更新此对象。

我正在使用以下代码来更新数据:

IQueryable<Competitors> getCompetitor = DatabaseObject.Competitors.Where(SelectOnly => SelectOnly.competitorID == competitorObject.competitorID);
Competitors competitor = getCompetitor.First();
competitor = competitorObject;
DatabaseObject.SaveChanges();

但这不起作用。如何更新数据库中的日期?

4

2 回答 2

2

假设您competitorObjectCompetitors类型为 ( competitor = competitorObject),您必须将其附加到您的上下文中,将其标记为已修改,然后保存更改:

DatabaseObject.Competitors.Attach(competitorObject);
DatabaseObject.Entry(competitorObject).State = EntityState.Modified;
DatabaseObject.SaveChanges();

在您的情况下,无需检索源对象,但如果不附加,上下文对您更新的对象一无所知。

如果您使用ObjectContextAPI 而不是DbContextAPI,则将对象标记为已修改的代码可能会有所不同:

DatabaseObject.ObjectStateManager.GetObjectStateEntry(competitorObject).SetModified();
于 2012-09-18T09:09:20.903 回答
0

您需要对代码进行的唯一更改以使其正常工作是更新获取的实体上的至少一个属性。您正在更新参考,而不是像这样的属性值:

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到上下文并将其标记为已修改。这样做会Competitors用 的值覆盖现有记录的所有属性CompetitorObject

于 2012-09-18T09:39:33.557 回答