NHibernate似乎不喜歡返回一個ReadOnlyCollection,depsite我已經實現了我已經讀過的大約30個地方,作爲一個只讀集合的正確訪問策略支持私有字段。NHibernate和ReadOnlyCollection <T>
我在實體下面的代碼:
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仍然堅持讓後臺列表通過只准備集合,當我做.Clear(),而不是像我已經告訴它在映射中一樣的東西嗎?我只是爲了持久層而改變我的域模型,但是NHibernate似乎並不想合作。
我得到的錯誤是「擁有cascade =」all-delete-orphan「的集合不再被擁有的實體實例引用」,但是當我在屬性獲取器中返回this._aliases
時,它會消失。
偉大的東西。使用.Select(x => x)解決了我一直存在的許多問題,並且仍將它保留爲只讀。標記你的接受答案。謝謝。 – starskythehutch 2012-02-23 15:19:50