1

少し問題があり、あなたの助けが必要です。データベース処理に Entity Framework を使用しており、このデータベースのデータセットを更新したいと考えています。

すべての変更を含む EntityObject があり、このオブジェクトを既存のオブジェクトで更新できるようにしたいと考えています。

次のコードを使用してデータを更新しています。

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

しかし、これは機能しません。データベースの日付を更新するにはどうすればよいですか?

4

2 に答える 2

2

competitorObjectあなたのCompetitorsタイプが ( ) であると仮定すると、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

コードを機能させるために必要な変更は、フェッチされたエンティティの少なくとも1つのプロパティを更新することだけです。次のように、プロパティ値ではなく、参照を更新しています。

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 に答える