How can I map a collection property of a concrete class, not an interface? It's got to be concrete class! I have no control over the class I want to map, so I can't change to interface.
Right now I'm trying to solve this by writing a custom IUserCollectionType
implementation and a custom IPersistentCollection
implementation.
But... The following exception has stopped mu progress:
Test method ShouldSaveEntityWithSections threw exception:
NHibernate.StaleStateException: Batch update returned unexpected row count fro开发者_Python百科m update; actual row count: 0; expected: 1
Profiler shows that NHibernate doesn't try to insert related entity into the database, but tries to update it's foreign key to parent object.
The mapping is like this:
<set name="Rows" table="Rows" lazy="false" cascade="all"
collection-type="My.PersistentListType`1[Blabla.Row, Blabla], My">
<key column="ParentID" not-null="true" />
<one-to-many class="Blabla.Row, Blabla" />
</set>
What's going on? Why doesn't NHibernate insert child entities into db?
Answering my own question. Hope it will help someone, who experience same problem.
That person should check that he\she doesn't create a related object in a state, which results in NHibernate thinking that it's already persisted.
In my case I mistakenly set a property mapped as primary key to Guid.NewGuid()
instead of Guid.Empty
.
精彩评论