考虑我们有一个使用Fluent NHibernate访问某些数据库的应用程序(我们不确切知道它将是什么类型的数据库)。并且考虑我们想要映射一些具有无符号类型id的类(例如ulong):
public class MyClass
{
public ulong id { get; set; }
//Other stuff
...
}
我们还有一个自定义IUserType
,它将ulong映射为DB支持的某种类型(例如)。让我们称之为ULongAsLong
。
我的目标是编写MyClass
映射,以便在{DB}支持无符号类型时将其id
映射为unsigned bigint
,如果不支持则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
实例,以决定是将{{1}}映射为ulong还是作为ULONGAsLong。
答案 0 :(得分:0)
查看ISessionFactoryImplementor
,请参阅https://github.com/nhibernate/nhibernate-core/blob/master/src/NHibernate/Engine/ISessionFactoryImplementor.cs
Dialect.Dialect Dialect { get; }
可以使用:
ISessionFactory factory = ...;
((ISessionFactoryImplementor)factory)