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();
}
}
С какой стати NHibernate по-прежнему настаивает на получении списка поддержки через коллекцию only only, когда я делаю что-то вроде .Clear (), вместо того, чтобы обращаться к нему, как я сказал в отображении? Я не хочу менять свою модель предметной области только ради слоя постоянства, но NHibernate, похоже, просто не хочет сотрудничать.
Я получаю сообщение об ошибке: «Коллекция с cascade =« all-delete-orphan »больше не упоминается экземпляром объекта-владельца», но она исчезает, когда я просто возвращаю this._aliases
в методе получения свойства.