这真的很奇怪。我正在尝试一个简单的事情,我正在尝试找到一个实体,更改该实体的一个字段,然后将更改提交到数据库:
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
状态,我看到我的Member
实体处于Modified
状态。当我在监视窗口中打开ChangeTracker中的Member
实体时,由于某种原因,这使得代码在我恢复时工作,并且数据库会相应地更新。
故事很长:SaveChanges
不会对数据库进行更改。但是,如果我在保存更改中设置断点,请查看监视窗口中的changetracker,然后打开修改后的实体(在我的示例中为Member
),然后只需恢复,它确实有效!
那么当您在监视窗口中的变更跟踪器中查看导致代码工作的实体时,会发生什么?我在这里不知所措,非常感谢任何帮助。提前谢谢。
答案 0 :(得分:0)
我已经弄明白了它是什么。会员POCO有以下字段:
[必需] 公共虚拟账户
必需的延迟加载字段。它吐了一个验证错误,因为它认为没有帐户,当我在监视窗口中打开实体时,它正在强制延迟加载启动,因此加载帐户。我已经取消了[必需],现在它正在工作。
现在弄清楚为什么我最初没有看到验证错误:/