设为首页 收藏本站
查看: 1488|回复: 0

[经验分享] .NET Framework 4.0 安装SQLite Provider碰到的一些问题

[复制链接]

尚未签到

发表于 2016-12-1 09:46:23 | 显示全部楼层 |阅读模式
  怎么在.NET中安装SQLite provider就不说了。网上一搜一大把。
  这里是一篇InfoQ上的文章:SQLite——只要3分钟,你就可以在.NET上创建和运行它
  这里只说碰到的两个问题。

1. 连接数据库时出现错误 -- 混合模式程序集是针对“v2.0.50727”版的运行时生成的……
  建立 SQLiteConnection 时抛出异常 FileLoadException 。具体错误信息为:混合模式程序集是针对“v2.0.50727”版的运行时生成的,在没有配置其他信息的情况下,无法在 4.0 运行时中加载该程序集
  这是因为.NET Framework 4.0中把版本号全部统一成4.0了,而这个SQLite provider是.NET 2.0的。解决方法也很简单。在app.config的configuration节点下加入以下节点:
  


<startup useLegacyV2RuntimeActivationPolicy="true">
<supportedRuntime version="v4.0"/>
</startup>
  想了解原理的可以去看 这篇文章。

2. 使用DataContext对象(Linq的用法)连接数据库,长时间程序无响应
  如果你为了图省事不想建立SQLiteConnection,直接建立DataContext,像这样:
  


var dc = new DataContext(@"data source=your_sqlite_db_path");
  那么稍后执行查询的时候,就会出现程序长时间无响应的情况。我想这是因为程序会默认创建 SQLServer 的 connection 而不是 SQLite 的 connection 的缘故。解决方法也很简单。手动建立一个 SQLiteConnection 然后传给 DataContext 就行。像这样:
  


var conn = new SQLiteConnection(@"data source=your_sqlite_db_path");
var dc = new DataContext(conn);
  顺便附上一小段Linq代码,算是备忘:
  


string dbPath = @"your_sqlite_db_path";
var dc = new DataContext(new SQLiteConnection(dbPath));
Table<User> user = dc.GetTable<User>();
// Linq form
// var query = from u in user
//                    where u.Name = "David"
//                    select u;
// lambda expression form
var query = user.AsQueryable().Where(u => u.Name == "David").Select(u => u);
foreach (User u in query)
Console.WriteLine("id: {0}, Name: {1}", u.Id, u.Name);

  其中User是数据表的实体类。定义如下:
  


// // table definition
// CREATE TABLE users (
//   id INTEGER PRIMARY KEY AUTOINCREMENT,
//   name VARCHAR(30)
// )
[Table(Name="users")]
class User
{
[Column(Name="id")]
public int Id { get; set; }
[Column(Name="name")]
public string Name { get; set; }
}
  搞Rails习惯了,表没有按照SQLServer的那一套命名规则来,所以还需要手动指定表名和字段名。如果表名和字段名都和实体类一样的话,就没必要手动指定映射了。不过Attribute还是要写的。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-308050-1-1.html 上篇帖子: sqlite的一个Unable to Open database file的坑爹错误 下篇帖子: SQLite的query方法,注意检查参数args中是否含null值
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表