我有一點與NHibernate /功能NHibernate的一個問題NHibernate只是將我的集合只讀。我怎樣才能阻止它?
我有了一個收集和支持字段,併爲操作收集像這樣方法的類:
編輯:已經添加了虛擬修飾符Children
因爲我忘了堅持在下面的示例代碼(這是凌晨2點)
public class MyClass
{
private IList<SomeChildObject> children;
public virtual IList<SomeChildObject> Children { get { return new ReadOnlyCollection<SomeChildObject>(children); } }
public void AddToChildren(SomeChildObject obj)
{
children.Add(obj);
}
}
我有我的功能NHibernate映射是這樣的:
public class MyClassMapping : ClassMap<MyClass>
{
public MyClassMapping()
{
HasMany(x => x.Children)
.Inverse()
.LazyLoad()
.Cascade.AllDeleteOrphan()
.KeyColumnNames.Add("MyClassID")
.Access.AsReadOnlyPropertyThroughCamelCaseField();
}
}
現在,當我從數據庫中撤回MyClass的實例時,所有這一切都很好。
MyClass myClass = repo.GetById(12);
myClass.AddToChildren(new SomeChildObject());
這工作正常。
然後我做了一些更改並將更改持久化到數據庫。
一旦更改已保存,然後我嘗試添加另一個子對象
myClass.AddToChildren(new SomeChildObject("Another One!!!"));
而且它倒下「出現InvalidOperationException:集合是隻讀的」
似乎NHibernate的做事情代理中的某個地方。有誰知道如何解決這個問題?
在此先感謝。
哪裏私營孩子得到初始化?我期望'children.Add(obj);'的空引用。 – dotjoe 2009-10-19 20:19:13