Entity Framework中使用SQLite的一些问题

SQLite数据相当的不错,我目前在一些小型网站都用这个数据库来取代Access,下面就是关于在ASP.NET的Entity Framework当中使用SQLite的一些经验和一些小问题的解决办法。

 

想要在ASP.NET中使用SQLite,首先需要下载System.Data.SQLite.DLL。点击这里可以下载。

下载好之后,添加该引用后即可使用ADO.NET对SQLite数据进行操作。

 

如果想使用Entity Framework,还需要执行bin/Designer下的install.exe,勾选你的IDE版本即可(这里会比较慢,不要以为死机了,安装完成以后,记得重新启动一下VS,否则会有一些小问题,当然,你没有遇到说明你RP比我好:-))。

这里主要说下在Entity Framework中的应用。

 

执行了install.exe后,新建一个ADO.NET Entity Data Model,然后选择从数据库生成。

之后新键连接,数据源选择SQLite Database File,点击确定之后,选择你数据库所在的目录即可。

这里需要注意一点,生成的连接字符串数据库的路径是绝对路径,如果你用虚拟主机,不知道绝对路径,可以采用以下办法:

编写一个静态方法获取连接字符串:

public static  string GetConnString()
    {
        return  "metadata=res://*;provider=System.Data.SQLite;provider connection string='data source=/"" + HttpContext.Current.Server.MapPath("~/TDB.s3db") + "/"'";
    }

红色文字出就可以填写你的相对路径,这个路径可以自己编写ConfigSection,在Web.config中定义。

 

OK,现在应该可以通过相对路径连接数据库了。

 

可以顺便编写一些代码测试一下:

using (TDBEntities context = new TDBEntities(GetConnString()))
{
                
         Label1.Text = context.UserInfo.First().UserName;
         context.Dispose();
}

 

SQLite的Entity Framework设置还是相当简单吧。

 

但是,在实际使用过程中,还会出现一些问题。

 

例如:当你在本地编写并测试好了以后,上传到服务器上(我用的是虚拟主机),可能会出现下面这个错误:

找不到请求的 .Net Framework 数据提供程序。可能没有安装。

这个问题比较好解决,Google一大把,在Web.Config中添加如下节点:

  <system.data>
    <DbProviderFactories>
      <remove invariant="System.Data.SQLite" />
      <add name="SQLite Data Provider" invariant="System.Data.SQLite" description=".Net Framework Data Provider for SQLite" type="System.Data.SQLite.SQLiteFactory, System.Data.SQLite" />
    </DbProviderFactories>
  </system.data>

 

添加好了以后,测试一下,果然没有报这个异常了,只是换了一个异常:

 

对类型"System.Data.SQLite.SQLiteFactory"的存储区提供程序调用"GetService"方法后,返回null。存储区提供程序可能未正常运行

 

这个问题,实际上是没有在全局程序集缓存当中注册System.Data.SQLite.DLL,只需要在你的部属服务器上用gacutil注册一下即可,命令如下:

gacutil /i System.Data.SQLite.DLL

路径自己设置,我这里举个例子。

 

那么,用虚拟机的朋友怎么办呢?

这里有个偏方,呵呵。

如果你租用的虚拟服务器目录有执行权限的话,把C盘下Program Files/Microsoft SDKs/Windows/v6.0a/bin目录里的gacutil.exe和System.Data.SQLite.DLL上传到服务器更目录,然后编写一个页面,代码如下:

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            Process.Start(Server.MapPath("~/gacutil.exe"), "/i "+Server.MapPath("~/System.Data.SQLite.Dll"));
        }
    }

呵呵,这样就在虚拟服务器上注册好了,该服务器上的其他用户也可以使用了。(注意该方法不保证每个人都能用,我租用的虚拟服务器用上面的方法可以注册)。

 

关于Entity Framework的使用,网上有很多实例,感兴趣的朋友可以去看看,他的使用其实也是相当的简单,但是要利用他设计出好的构架还是要花一些功夫的。asp.net官方网站有个MVC的实例,不过是Linq to SQL的,使用上差不多,叫NerdDinner,虽然短小,但其构架很清晰,考虑了软件设计的几个很重要的方面,值得参考。

 

这段时间神经衰弱,写文章也晕乎乎的,如果文中有什么错误,欢迎大家批评指正。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值