【发布时间】:2012-02-23 09:21:59
【问题描述】:
NHibernate 似乎真的不喜欢返回 ReadOnlyCollection,尽管我已经将我在大约 30 个地方读到的内容实现为支持私有字段的只读集合的正确访问策略。
我的实体中有以下代码:
private readonly IList<TagAlias> _aliases = new List<TagAlias>();
public IEnumerable<TagAlias> Aliases
{
get
{
return new ReadOnlyCollection<TagAlias>(this._aliases);
}
}
以及以下映射以允许访问支持字段
public sealed class TagMap : ClassMap<Tag>
{
public TagMap()
{
Table("Tag");
Id(x => x.Id).Column("TagId").GeneratedBy.Identity();
Map(x => x.Value).Column("TagName");
HasMany(x => x.Aliases)
.AsSet()
.Access.ReadOnlyPropertyThroughCamelCaseField(Prefix.Underscore)
.KeyColumn("TagId")
.LazyLoad()
.Inverse()
.Cascade.AllDeleteOrphan();
}
}
当我执行 .Clear() 之类的操作时,为什么 NHibernate 仍然坚持通过仅现成的集合获取支持列表,而不是像我在映射中告诉它的那样访问它?我不愿意仅仅为了持久层而改变我的领域模型,但 NHibernate 似乎并不想合作。
我得到的错误是“拥有 cascade="all-delete-orphan" 的集合不再被拥有的实体实例引用”但是当我在属性 getter 中返回 this._aliases 时它就消失了。
【问题讨论】:
标签: c# .net nhibernate fluent-nhibernate fluent-nhibernate-mapping