Let's say I have something similar to this :
public class DataType
{
//For NHibernate
private DataType(){}
public DataType(string name, Type type, string defaultValue)
{
Name = name;
TypeOfContent = type;
DefaultInvariantStringValue = defaultValue;
}
public string Name { get; set; }
public Type TypeOfContent { get; set; }
public string DefaultInvariantStringValue { get; set; }
}
How do I map the property TypeOfContent with NHibernate (fluent mapping would be appreciated too)?
I would constrain Type to C# Built-In Types e.g. string, int, datetime, etc. So I would like to store System.String (for a string) in the database
I'm curious, why don't you do this instead
I will try to answer my own question but I hope there's another (easier/cleaner) way.
I think I could change the type of the property TypeOfContent to something like BuiltInType (a custom Type wrapper class) so it could implement IUserType.
I could then use this technique : http://blog.jagregory.com/2009/01/11/fluent-nhibernate-auto-mapping-type-conventions/
Edit 1: I don't like this solution cause it forces me to add a dependency (IUserType) on NHibernate on my model.
I'm wondering if this is being overthought a little. Can you not simply map the type as a property?
In sqlite at least this will map to a TEXT column which will store the AssemblyQualifiedName.
The relevant hbm.xml is here:
The additional question of how to elegantly map the default value is also of interest to me. In sqlite at least there is no 'strong-typing' of a column (I am probably using the wrong terminology, see the link) so at the database level at least it should be possible to simply have an object DefaultValue and persist/depersist without loss of precision. However, it remains an open question as to how to create a mapping for this that NHibernate will understand.