【发布时间】:2013-12-30 11:11:39
【问题描述】:
用户拥有许多 UserItems。
[Set(0, Cascade = "all-delete-orphan", Lazy = CollectionLazy.False)]
[Key(1, Column = "user_id")]
[OneToMany(2, ClassType = typeof(UserItem))]
public virtual ISet<UserItem> Items { get { return _items; } set { _items = value; } }
每个 UserItem 都有一个对 User 的引用:
[ManyToOne(Name = "User", Lazy = Laziness.False, Column = "user_id")]
protected virtual User User { get; set; }
问题是,当我只修改用户属性并更新它时,nh 会为每个 UserItem 生成更新查询。我不会更改 Items 属性或任何孩子的任何属性。
nh 不应该正确跟踪这样的变化吗?我希望在更新父级时只更新更改的子级。
更新
我想我明白为什么它对我不起作用,但我不知道如何解决它。当他连接时,我将用户实体保存在内存中。我不能使用一个会话对用户进行所有操作(因为可能有数千个连接的用户)。所以我打开会话,获取用户并关闭会话。然后我对用户进行一些更改,再次打开会话并调用更新。新会话不会跟踪该用户实例更改。那我该怎么办?
【问题讨论】:
-
请提供一个工作示例来重现它。我无法使用提供的代码重现它...
标签: hibernate nhibernate