我有一点与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