MONO使用SQLITE + Nhibernate

因某项目需移动到JEXUS上,该项目采用的是SQLITE + Nhibernate结构

在移植的过程中出现了一些问题,特此记录

首先System.Data.Sqlite在MONO下是不能用的

并且Nhibernate的配置文件引用的驱动类NHibernate.Driver.SQLite20Driver是不支持的

所以我们要对以上几点进行修改

1. 添加 MonoSQLiteDriver 类

public class MonoSQLiteDriver : NHibernate.Driver.ReflectionBasedDriver  
{  
        public MonoSQLiteDriver() 
            : base(
            "Mono.Data.Sqlite",
            "Mono.Data.Sqlite",  
            "Mono.Data.Sqlite.SqliteConnection",  
            "Mono.Data.Sqlite.SqliteCommand")  
    {  
    }  

    public override bool UseNamedPrefixInParameter {  
        get {  
            return true;  
        }  
    }  

    public override bool UseNamedPrefixInSql {  
        get {  
            return true;  
        }  
    }  

    public override string NamedPrefix {  
        get {  
            return "@";  
        }  
    }  

    public override bool SupportsMultipleOpenReaders {  
        get {  
            return false;  
        }  
    }  
}  

  

2. 将hibernate.cfg.xml 里的connection.driver_class节点的值,改成步骤1里的类, 即 YourNameSpace.MonoSqliteDriver, AssemblyName

如: <property name="connection.driver_class">xxxxx.MonoSqliteDriver, xxxxxxx</property>

如果使用FluentNHibernate, 还需要如下

public class MonoSQLiteConfiguration : PersistenceConfiguration<MonoSQLiteConfiguration>
{
    public static MonoSQLiteConfiguration Standard
    {
        get { return new MonoSQLiteConfiguration(); }
    }

    public MonoSQLiteConfiguration()
    {
        Driver<MonoSQLiteDriver>();
        Dialect<SQLiteDialect>();
        Raw("query.substitutions", "true=1;false=0");
    }

    public MonoSQLiteConfiguration InMemory()
    {
        Raw("connection.release_mode", "on_close");
        return ConnectionString(c => c
            .Is("Data Source=:memory:;Version=3;New=True;"));

    }

    public MonoSQLiteConfiguration UsingFile(string fileName)
    {
        return ConnectionString(c => c
            .Is(string.Format("Data Source={0};Version=3;New=True;", fileName)));
    }

    public MonoSQLiteConfiguration UsingFileWithPassword(string fileName, string password)
    {
        return ConnectionString(c => c
            .Is(string.Format("Data Source={0};Version=3;New=True;Password={1};", fileName, password)));
    }
}

  

3. 用Nuget添加Mono.Data.Sqlite的引用

 

这样就把IIS+SQLite+Nhibernate的环境移植到Jexus+Sqlite(MONO)+Nhibernate上了.

转载于:https://www.cnblogs.com/vingi/articles/4302497.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值