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,虽然短小,但其构架很清晰,考虑了软件设计的几个很重要的方面,值得参考。