Если вам не нужно делать что-то особенное, UriType
, предоставляемое NHibernate, будет работать (я не знаю, какая версия была представлена - я использую 3.1.4000). Нет необходимости писать пользовательский тип пользователя.
ClassMap
Вы можете указать UriType
в ClassMap<>
:
public class ImportedWebImageMap : ClassMap<ImportedWebImage>
{
public ImportedWebImageMap()
{
Id(x => x.Id);
Map(x => x.SourceUri).CustomType<UriType>();
}
}
Конвенция о собственности
Вы можете использовать соглашение о свойствах для сопоставления всех Uri
свойств для использования UriType
:
public class UriConvention : IPropertyConvention
{
public void Apply(IPropertyInstance instance)
{
if (typeof(Uri).IsAssignableFrom(instance.Property.PropertyType))
instance.CustomType<UriType>();
}
}
Хранить как varchar
Если вы хотите сохранить Uri
в базе данных как varchar
вместо значения по умолчанию nvarchar
, вы можете создать пользовательский тип, производный от UriType
и указывающий тип AnsiString
SQL:
public class UriAnsiStringType : UriType
{
public UriAnsiStringType()
: base(new AnsiStringSqlType())
{ }
public override string Name
{
get { return "UriAnsiStringType"; }
}
}