Fluent Nhibernate:如何根据底层数据库更改字段映射?

时间:2011-04-19 08:57:24

标签: nhibernate sqlite fluent-nhibernate nhibernate-mapping

我正在使用Nhibernate 3.0和Fluent Nhibernate进行项目。我们将SQL-Server 2008用于生产目的。对于版本控制,我们依赖于SQL-Server端生成的时间戳。

最近我开始使用内存SQLite数据库编写存储库测试。不幸的是,SQLite无法生成时间戳,因此任何插入都会因约束违规而失败。

当我编译SQLite底层数据库的映射时,我想将版本映射更改为Nhibernate托管的版本。传达这个想法的代码看起来大致如下:

public class CommonClassMap<T> : ClassMap<T> where T:Entity
{
    public CommonClassMap()
    {
        if (SQLITE)
        {
            Version(n => n.Version);
        }
        else
        {
            Version(n => n.Version).CustomSqlType("timestamp").UnsavedValue("null").CustomType("BinaryBlob").
                Generated.Always();
        }

不幸的是,我无法找到任何方法在运行时更改映射或从ClassMap读取底层数据库信息。欢迎任何帮助。

1 个答案:

答案 0 :(得分:0)

我所做的是为不同的数据库提供商分别提供ClassMap个。但是,我没有要求能够在运行时更改它,它在应用程序的整个生命周期中都配置了一次。

你仍然可以保留你的系统,但我猜你自己会保留SQLITE和类似的东西。另外,不要太依赖在一个数据库提供程序(如SQLite)上运行的代码也会在其他提供程序上运行,因此您也应该始终包含SQL Server测试。