加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Mono下配置ActiceRecord使用sqlite数据库

发布时间:2020-12-12 20:38:41 所属栏目:百科 来源:网络整理
导读:.Net下我们经常使用的System.Data.Sqlite是一个嵌入了原生c++ sqlite数据库模块的程序集,由于大多数的Linux下默认已经具备了Sqlite的运行环境,System.Data.Sqlite无法运行在Linux下。所以,Mono.Data.Sqlite [1] 出现了,Mono.Data.Sqlite可以让Mono下的程

.Net下我们经常使用的System.Data.Sqlite是一个嵌入了原生c++ sqlite数据库模块的程序集,由于大多数的Linux下默认已经具备了Sqlite的运行环境,System.Data.Sqlite无法运行在Linux下。所以,Mono.Data.Sqlite [1]出现了,Mono.Data.Sqlite可以让Mono下的程序使用相同的类名操作sqlite数据库,方便应用程序从Windows迁移到Linux:你只需更改项目引用即可。

但由于ActiceRecord已封装了NHibernate的数据库驱动类"NHibernate.Driver.SQLite20Driver",而该驱动类默认从System.Data.Sqlite程序集中加载所需类,因此ActiceRecord使用Sqlite在Linux环境下的Mono中运行就出现了矛盾:ActiveRecord需要System.Data.Sqlite,而该程序集无法在Linux环境下的Mono中被正常运行,这就需要一个中间类[2]来进行转接,并且进行对应的配置。

1. 在项目中添加中间类MonoSqliteDriver

namespace Your.Assembly{    public class MonoSqliteDriver : NHibernate.Driver.ReflectionBasedDriver    {        public MonoSqliteDriver() :            base("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. 修改ActiveRecord配置文件

<add key="connection.driver_class" value="NHibernate.Driver.SQLite20Driver" /><!--<add key="connection.driver_class" value="Your.Assembly.MonoSqliteDriver,Your.Assembly" />-->

3. 添加Mono.Data.Sqlite引用

以Ubuntu 10.04为例,Mono.Data.Sqlite.dll可以从该目录下找到

cp /usr/local/lib/mono/4.0/Mono.Data.Sqlite.dll ~/

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读