我正在使用 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 对象,而不仅仅是查询 Membership DbSet,因为我也想读取一些 User 属性。
在父用户表上触发的 SQL 是:
update [dbo].[Users]
set @p = 0
where (([Id] = @0) and ([Version] = @1))