这真的很奇怪。我想要一个简单的事情,我试图找到一个实体,改变实体的域,然后提交更改到数据库:实体框架不会对数据库提交更改
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。
当我这样做,一切都看起来不错,我看到我的Centre
实体在Unchanged
状态,我看到Modified
状态我Member
实体。当我打开位于监视窗口中ChangeTracker的Member
实体时,出于某种原因,这使得代码在恢复时可以正常工作,并且相应地更新了数据库。
长话短说:SaveChanges
不会对数据库提交更改。但是,如果我在保存更改时放置断点,请查看监视窗口中的更改跟踪器,然后打开修改后的实体(在我的示例中为Member
),然后恢复,它可以工作!
那么当您在监视窗口中查看导致代码工作的changetracker中的实体时会发生什么?我在这里感到茫然,非常感谢任何帮助。提前致谢。
我只想补充一点,这是一个控制器的动作里面,如果该事项在所有。 – Dean
而'member'和'centre'都不是'null'? –
在'savechnages'行之前加上。 'context.Entry(member).State = EntityState.Modified;' – Mairaj