我正在使用EF 4.2,相关位看起来像:
public class MyDbContext : DbContext
{
public IDbSet<User> Users { get; set; }
public IDbSet<Membership> Memberships { get; set; }
}
public User()
{
public int Id { get; set; }
public string Email { get; set; }
public virtual Membership Membership { get; set; }
}
如果我撤回特定用户然后更新关联的成员资格对象(更新失败的密码计数),则会更新成员资格对象,但用户也会更新,尽管事实上没有任何用户属性已更新。这是因为Membership对象触发了某种已更改的事件,并且它被冒泡到父用户?
即使我加载用户然后使用_context.Memberships.Find(userId)获取成员资格而不是仅使用user.Membership导航属性,也会发生这种情况。我在上下文图中猜测这两个是等价的吗?
有没有办法停止更新User对象,因为我使用了修改日期的计算值列,我希望在更改子实体时不更新它。理想情况下,我想拉回User对象,而不是仅查询Membership DbSet,因为我也想读取一些User属性。
在父Users表上触发的SQL是:
update [dbo].[Users]
set @p = 0
where (([Id] = @0) and ([Version] = @1))