For one of my projects, our end-users went crazy and asked for a dynamic fields feature which allows them to add and remove some extra fields on every entity. This is actually quite easy to implement with NHibernate.
Let’s first have a look at the entity(this is a simplified version):
public class File { public virtual int Id { get; set; } public virtual string Name { get; set; } public virtual IDictionary<string, string> Attributes { get; set; } }
And the corresponding mapping file (didn’t had time to look at the code mapping yet):
<class name="File" table="Files"> <id name="Id"> <generator class="native"/> </id> <property name="Name"/> <map name="Attributes" table="FileAttributes"> <key column="FileId"/> <index column="AttributeName" type="System.String"/> <element column="Attributevalue" type="System.String"/> </map> </class>
And that’s all you need to do. This will create 2 tables, one table(Files) with the File properties and one table(FileAttributes) with the extra values.
Anyone who knows how to do the same thing with Entity Framework?