我有一点问题,我需要你的帮助。我正在使用Entity Framework进行数据库处理,我想更新此数据库中的数据集。
我有一个包含所有更改的EntityObject,并且希望能够使用现有Object更新此Object。
我正在使用以下代码更新数据:
IQueryable<Competitors> getCompetitor = DatabaseObject.Competitors.Where(SelectOnly => SelectOnly.competitorID == competitorObject.competitorID);
Competitors competitor = getCompetitor.First();
competitor = competitorObject;
DatabaseObject.SaveChanges();
但这不起作用。如何更新数据库中的日期?
答案 0 :(得分:2)
假设您的competitorObject
属于Competitors
类型(competitor = competitorObject
),您必须将其附加到您的上下文,将其标记为已修改,然后保存更改:
DatabaseObject.Competitors.Attach(competitorObject);
DatabaseObject.Entry(competitorObject).State = EntityState.Modified;
DatabaseObject.SaveChanges();
在您的情况下无需检索源对象,但如果没有附加,上下文对您更新的对象一无所知。
如果您使用ObjectContext
API代替DbContext
API,那么将对象标记为已修改的代码可能略有不同:
DatabaseObject.ObjectStateManager.GetObjectStateEntry(competitorObject).SetModified();
答案 1 :(得分: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();
或者正如Dennis所说,您可以将CompetitorObject
附加到上下文并将其标记为已修改。这样做会覆盖现有Competitors
记录的所有属性,其值为CompetitorObject
。