2014-11-07 1 views
0

Я вижу, как я могу использовать файл сопоставления, чтобы указать пользовательский IUserType для любого nhibernate-сопоставленного класса, который я хочу.Могу ли я сообщить nhibernate об общей замене System.Data.DbType для пользовательского IUserType?

Однако я не хочу набирать его каждый раз. Есть ли способ переопределить стандартную таблицу сопоставления, которую можно увидеть здесь? enter image description here

У меня есть реализация IUserType Jørn Schou-Rode для хранения указателя в двоичном (16) в MariaDB. Все, что я хочу, это ввести одну или две строки кода, чтобы сообщить Nhibernate, когда видит System.Guid, чтобы преобразовать его в пользовательский «BinaryGuidType», который сделал мне Schou-Rode. Это можно сделать?

+0

Мне больше не нужен ответ, я просто вернулся к использованию int для идентификаторов для большинства вещей сейчас. Я бы использовал Guid, если MariaDB лучше поддерживал его. –

ответ

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

+0

Прекрасно, я не знал об этом. –

Смежные вопросы