如何在Fluent NHibernate映射中检索Dialect实例

时间:2013-09-02 13:11:10

标签: nhibernate orm fluent-nhibernate nhibernate-mapping fluent-nhibernate-mapping

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

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

    //Other stuff
    ...
}

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

我的目标是编写MyClass映射,以便在{DB}支持无符号类型时将其id映射为unsigned bigint,如果不支持则ULongAsLongpublic 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实例,以决定是将{{1}}映射为ulong还是作为ULONGAsLong。

1 个答案:

答案 0 :(得分:0)

查看ISessionFactoryImplementor,请参阅https://github.com/nhibernate/nhibernate-core/blob/master/src/NHibernate/Engine/ISessionFactoryImplementor.cs

Dialect.Dialect Dialect { get; }

可以使用:

ISessionFactory factory = ...; 
((ISessionFactoryImplementor)factory)