これは実際には奇妙です。私は、エンティティを見つけ、そのエンティティのフィールドを変更し、データベースに変更をコミットしようとしている、シンプルなものにしようとしている:Entity Frameworkはデータベースへの変更をコミットしません
using (AppDbContext context = new AppDbContext()) {
try {
var member = context.Members.SingleOrDefault(m = m.MembershipNumberId == membershipNo);
var centre = context.Centres.SingleOrDefault(c => c.CentreId == oldCentreId);
if (member != null) {
if (centre != null) {
member.Centre_id = Centre.id;
context.SaveChanges();
}
}
} catch (Exception e) {
HandleError(e);
}
}
だから、単純明快なものを。ただし、何らかの理由でデータベースに変更がコミットされておらず、実際にはEntityState
が残りますModified
です。
ここで私の見解では本当に奇妙なことが起こります:私はAppDbContext.SaveChanges()
にブレークポイントを入れて、デバッグでchangetrackerを見ることができました。
私はこれを行うと、すべては私がUnchanged
状態で私のCentre
エンティティを参照してください、と私はModified
状態で私のMember
エンティティを参照して、よさそうです。ウォッチウィンドウのChangeTrackerにあるMember
エンティティを開くと、何らかの理由でこれが再開するとコードが機能し、それに応じてデータベースが更新されます。
ストーリーが短いので、SaveChanges
はデータベースに変更をコミットしません。しかし、私が変更を保存する際にブレークポイントを置くと、ウォッチウィンドウのチェンジトラッカーを見てから、変更されたエンティティ(私の例ではMember
)を開いてから再開するだけです。
したがって、ウォッチウィンドウ内のチェンジトラッカーのコードが動作するエンティティを見ると、何が起きる可能性がありますか?私はここで敗北しており、どんな助けにも大いに感謝しています。前もって感謝します。
それがすべてで重要ならば、私はただ、これはコントローラのアクションの中にあることを追加する必要があります。 – Dean
'member'と' centre'はどちらも 'null'ではありませんか? –
これを 'savechnages'行の前に追加してください。 'context.Entry(メンバ).State = EntityState.Modified;' – Mairaj