首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用另一个EntityObject更新EntityObject

使用另一个EntityObject更新EntityObject
EN

Stack Overflow用户
提问于 2012-09-18 17:02:30
回答 2查看 121关注 0票数 1

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

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

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

代码语言:javascript
复制
IQueryable<Competitors> getCompetitor = DatabaseObject.Competitors.Where(SelectOnly => SelectOnly.competitorID == competitorObject.competitorID);
Competitors competitor = getCompetitor.First();
competitor = competitorObject;
DatabaseObject.SaveChanges();

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-09-18 17:09:21

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

代码语言:javascript
复制
DatabaseObject.Competitors.Attach(competitorObject);
DatabaseObject.Entry(competitorObject).State = EntityState.Modified;
DatabaseObject.SaveChanges();

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

如果您使用的是ObjectContext应用程序接口而不是DbContext应用程序接口,则将对象标记为已修改的代码段可能会略有不同:

代码语言:javascript
复制
DatabaseObject.ObjectStateManager.GetObjectStateEntry(competitorObject).SetModified();
票数 2
EN

Stack Overflow用户

发布于 2012-09-18 17:39:34

要使代码正常工作,您需要对代码进行的唯一更改是更新获取的实体上的至少一个属性。更新的是引用,而不是属性值,如下所示:

代码语言:javascript
复制
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记录的所有属性。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12473681

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档