Могу ли я сказать 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

Другие вопросы по тегам