我可以告诉nhibernate将System.Data.DbType完全交换为自定义IUserType吗?

我可以告诉nhibernate将System.Data.DbType完全交换为自定义IUserType吗?,nhibernate,nhibernate-4,Nhibernate,Nhibernate 4,我了解了如何使用映射文件为我想要的任何nhibernate映射类指定自定义IUserType 但是,我不想每次都输入它。有没有办法覆盖这里看到的标准映射表 我有Jørn Schou Rode的IUserType实现,用于在MariaDB中以二进制(16)形式存储guid。我只想输入一两行代码,当Nhibernate看到System.Guid时告诉它,将其转换为Schou Rode为我创建的自定义“BinaryGuidType”。可以这样做吗?如果您使用的是Fluent NHibernate,那么

我了解了如何使用映射文件为我想要的任何nhibernate映射类指定自定义IUserType

但是,我不想每次都输入它。有没有办法覆盖这里看到的标准映射表


我有Jørn Schou Rode的IUserType实现,用于在MariaDB中以二进制(16)形式存储guid。我只想输入一两行代码,当Nhibernate看到System.Guid时告诉它,将其转换为Schou Rode为我创建的自定义“BinaryGuidType”。可以这样做吗?

如果您使用的是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的更高版本内置了对约定的支持,但是文档似乎很少。这里有一篇文章供您开始阅读:

我不再需要这个问题的答案了,我现在只想在大多数情况下使用int作为标识符。如果MariaDB有更好的支持,我会使用Guid。很好,我不知道这些。