我正在使用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读取底层数据库信息。欢迎任何帮助。
答案 0 :(得分:0)
我所做的是为不同的数据库提供商分别提供ClassMap
个。但是,我没有要求能够在运行时更改它,它在应用程序的整个生命周期中都配置了一次。
你仍然可以保留你的系统,但我猜你自己会保留SQLITE
和类似的东西。另外,不要太依赖在一个数据库提供程序(如SQLite)上运行的代码也会在其他提供程序上运行,因此您也应该始终包含SQL Server测试。