0

考虑我们有一个使用 Fluent NHibernate 来访问一些数据库的应用程序(我们不知道它到底是什么类型的数据库)。并考虑我们想要映射一些具有无符号类型 id 的类(例如 ulong):

public class MyClass
{
    public ulong id { get; set; }

    //Other stuff
    ...
}

我们还有一个自定义IUserType,将 ulong 映射为 DB 支持的某种类型(例如,只要)。让我们称之为ULongAsLong

我的目标是编写一个MyClass映射,以便将其id映射为unsigned bigint好像 DB 支持无符号类型并且ULongAsLong好像它不支持一样。像这样的东西:

public class MyClassMap : ClassMap<MyClass>
{
    public MyClassMap()
    {
        //Here goes some function or something that retrieves a Dialect instance.
        var dialect = ...;
        if (supportsULong(dialect))
        {
            Id(x => x.id);                    
        }
        else
        {
            Id(x => x.id).CustomType<ULongAsLong>();
        }

        //Mapping everything else
        ...
    }

    private bool supportsULong(Dialect dialect)
    {
        //Some code that finds out if ulong is supported by DB.
    }
}

所以问题是我如何Dialect在映射中检索一个实例来决定是映射id为 ulong 还是 ULongAsLong。

4

1 回答 1

0

看看ISessionFactoryImplementor,见https://github.com/nhibernate/nhibernate-core/blob/master/src/NHibernate/Engine/ISessionFactoryImplementor.cs

Dialect.Dialect Dialect { get; }

可以使用:

ISessionFactory factory = ...; 
((ISessionFactoryImplementor)factory)
于 2013-09-03T06:21:58.443 回答