修改子项时更新聚合根

时间:2012-02-06 12:36:34

标签: entity-framework-4.1 aggregateroot

我正在使用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))

0 个答案:

没有答案