Entity Framework中使用SQLite的一些问题

前端之家收集整理的这篇文章主要介绍了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,虽然短小,但其构架很清晰,考虑了软件设计的几个很重要的方面,值得参考。

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

猜你在找的Sqlite相关文章