当通过NHibernate检索集合时,我无法使用.RemoveAll
。NHibernate:在集合上调用.RemoveAll
我有一个实体叫Order
,我坚持通过NHibernate。
Order
有很多OrderItems
。这是我对这个映射关系:
mapping.HasMany(o => o.Items)
.Cascade.AllDeleteOrphan()
.AsList()
.Inverse();
在我的域名看起来像这样:
public virtual IList<OrderItem> Items { get; set; }
据我了解,我必须使用IList
因为NHibernate的有它自己的List实现。
现在我想从我的Order
使用此方法在我Order
类删除项目:
public virtual void RemoveItem(string variantSku)
{
items.RemoveAll(x => x.Variant.VariantSku == variantSku);
}
它不工作,因为IList
没有这个方法。
我想:
items.ToList().RemoveAll(x => x.Variant.VariantSku == variantSku);
但是,这似乎并没有工作。我意识到items.ToList()
实际创建原始列表的副本,所以我想我可以尝试:
var itemsList = items.ToList();
itemsList.RemoveAll(...)
但后来它仍然可以通过NHibernate的坚持?
我的问题:我可以在这种情况下实际使用.RemoveAll
吗?或者我应该考虑以不同的方式移除一个项目?
我不确定你需要item.Order = null,如果你在映射中有.Cascade.AllDeleteOrphan(),是吗?这不正是AllDeleteOrphan()所做的吗?其余的是现货。正在让这名男生犯错误,对项目进行foreach'ing并试图删除。 – autonomatt 2012-01-27 15:10:01
item.Order = null是使它成为孤儿的原因,否则会话刷新时会重新保存。 – 2012-01-27 15:53:41
其实你的代码不起作用。你仍然会得到一个例外:“集合被修改;枚举操作可能无法执行。“我最终使用了for循环。 – autonomatt 2012-01-31 13:33:57