I searched everywhere, including this group, about NH deleting and
then re-inserting rows in a collection, but every result I found was
about using bags or lists without an index. I don't believe that is
my situation because I'm using a <map/>.
I have Contacts, Addresses and ContactAddresses tables -- the latter
being a join table with ContactID, AddressTypeID. In code, Contact
has an IDictionary<AddressTypeEnum,Address> (and I'm mapping the enum
as an Int). Here's my mapping:
<!-- excerpted from FluentNH-generated mapping for Contact ... >
<map cascade="all" lazy="true" name="Addresses"
table="tblContactAddresses" mutable="true">
<key>
<column name="ContactID" />
</key>
<index type="System.Int32, mscorlib, Version=4.0.0.0,
Culture=neutral, PublicKeyToken=b77a5c561934e089">
<column name="AddressTypeID" />
</index>
<many-to-many class="MyProject.Address, MyProject,
Version=1.0.0.0, Culture=neutral, PublicKeyToken=null">
<column name="AddressID" />
</many-to-many>
</map>
Using NHProf, I can clearly see it deleting all ContactAddress rows
for a Contact, and then re-inserting them (example shows contact who
happens to have only a single address):
DELETE FROM dbo.tblContactAddresses WHERE ContactID = 1 /* @p0
*/
INSERT INTO dbo.tblContactAddresses
(ContactID, AddressTypeID, AddressID)
VALUES (1 /* @p0 */, 'Home' /* @p1 */, 270 /* @p2 */)
>From the other search results about bags and lists-without-index, I
gather that if NH can't determine the identity of an item in the
collection, it will do this. But there's two things I can't
understand about that in my situation:
1. Shouldn't AddressTypeEnum and the Address' identity be a unique
combination for the collections o that NH can't identify individual
items?
2. I'm not actually touching anything in my collection! I'm just
fetching it, transforming the entity data into DTOs, and then closing
my unit of work.
I'd appreciate any insights, or even additional debugging tips.
P.S. I only recently discovered NHProf and I'm blown away by it...
awaiting a PO!
--
You received this message because you are subscribed to the Google Groups
"nhusers" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/nhusers?hl=en.