NHibernate Mapping - <component/>
<component/> is an interesting feature of NHibernate, which map more or less directly into the notion of a Value Type in DDD. This is a way to create an object model with higher granularity than the physical data model.
For example, let us take the following table:
And this object model:
They are quite different, where the physical data model put all the data in a single table, we want to treat them in our object model as two separate classes. This is where <component/> comes into play:
<class name="Person"
table="People">
<id name="Id">
<generator class="identity"/>
</id>
<property name="Name" />
<component name="Address">
<property name="Line1"/>
<property name="Line2"/>
<property name="City"/>
<property name="Country"/>
<property name="ZipCode"/>
</component>
</class>
This mapping will translate between the physical data model and the object model. And the mapping is complete, so even queries are done in the way you would expect it:
And then we let NHibernate sort it out and give us our pretty object graph.