leo*_*ora 6 c# nhibernate asp.net-mvc fluent-nhibernate
我有X其中类型的对象_对象具有属性ListOfObjectYs那一个
List<objectY>
Run Code Online (Sandbox Code Playgroud)
nhibernate映射看起来像这样:
public ObjectXMap()
{
HasMany(x => x.ListOfObjectYs).AsBag().Inverse();
}
Run Code Online (Sandbox Code Playgroud)
当我去保存它时,我在objectX上更改了一些属性,然后:
Session.SaveOrUpdate(x);
Run Code Online (Sandbox Code Playgroud)
现在我需要更新这个列表的属性.我得到一个新的objectYs列表,我想用一个新列表替换现有的objectY列表.我需要这样做吗?
foreach (ObjectY y in x.ListOfObjectYs)
{
Session.Delete(y);
deleted = true;
}
if (deleted)
{
_session.Flush();
}
x.ListOfObjectYs.Clear();
foreach (ObjectY y in newObjectYList)
{
x.ListOfObjectYs.Add(y);
Session.SaveOrUpdate(y);
}
_session.Flush();
Run Code Online (Sandbox Code Playgroud)
我的问题是:
是否有更好的方法来执行此更新,我需要更新对象(属性),但也更新列表中存在全新列表的属性(意味着需要删除和添加项目).
你的问题的答案是否定的。如果您想替换列表,您应该清除它并添加新项目。如果您将级联设置为 all-delete-orphan,如 James Kovacs 的回答所示,那么当会话刷新时,对集合的更改将被保留。
了解 NHibernate 中 Save、Update 和 SaveOrUpdate 的含义非常重要:
另请参阅操作持久数据。
假设所有对象都在同一个会话中加载,那么替换集合可能就像以下一样简单:
x.ListOfObjectYs.Clear();
foreach (ObjectY y in newObjectYList)
{
x.ListOfObjectYs.Add(y);
}
_session.Flush();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7028 次 |
| 最近记录: |