Могу ли я сказать nhibernate полностью заменить System.Data.DbType для пользовательского IUserType?
Я вижу, как я могу использовать файл сопоставления, чтобы указать собственный IUserType для любого сопоставленного класса nhibernate, который я хочу.
Однако я не хочу вводить его каждый раз. Есть ли способ переопределить стандартную таблицу сопоставления, увиденную здесь?
У меня есть реализация IUserType Йорна Шоу-Роде для хранения guid в Binary(16) в MariaDB. Все, что я хочу, это ввести одну или две строки кода, чтобы сообщить Nhibernate, когда он видит System.Guid, чтобы преобразовать его в пользовательский "BinaryGuidType", который сделал мне Шу-Роде. Это можно сделать?
1 ответ
Если вы используете Fluent NHibernate, вы можете легко сделать это с помощью конвенций. Вот как я сопоставляю все строки с varchar вместо nvarchar:
public class PropertyConvention : IPropertyConvention
{
public void Apply(IPropertyInstance instance)
{
SetStringsAsAnsiStringByDefault(instance);
}
private void SetStringsAsAnsiStringByDefault(IPropertyInstance instance)
{
if (instance.Property.PropertyType == typeof(string))
{
instance.CustomType("AnsiString");
}
else if (instance.Property.PropertyType == typeof(char))
{
instance.CustomType("AnsiChar");
}
}
}
Я полагаю, что более поздние версии NHibernate имеют встроенную поддержку соглашений, но документация кажется скудной. Вот статья для вас, чтобы начать, хотя: http://weblogs.asp.net/ricardoperes/nhibernate-conventions