如何用Entity Framework 6 连接Sqlite数据

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何用Entity Framework 6 连接Sqlite数据相关的知识,希望对你有一定的参考价值。

参考技术A   获取Sqlite
  1.可以用NuGet程序包来获取,它也会自动下载EF6
  2.在Sqlite官网上下载对应的版本:
  注意这里面每个.net framework都有两个版本,一个带有bundle字眼,一个没有。一个安装的DLL里面包含SQLite.Interop.dll,而另一个没有。如果你运行代码的时候报
  “无法加载SQLite.Interop.dll”的错误,则将安装文件中的SQLite.Interop.dll拷贝到Bin文件中即可。或是在NuGet下载的packages\System.Data.SQLite.Core.1.0.94.0\build中也有对应的程序。
    
  注意:
  1.连接串的配置。
  数据连接串可以指定绝对地址,也可以指定相对地址。像我的data source=SqliteTest.db,则SqliteTest.db要在Bin文件夹中,如果是web程序可以通过Data Source=|DataDirectory|\SqliteTest.db来配置在App_Data文件平中。
  2.如果没有指定数据库中的表文件名,EF生成的SQL表都是用复数表示。就像我的程序中实体名是Person,但EF去查找的表名会是People。所以在数据库中定义的表名是People。
  3.不支持CodeFirst模式,您需要自己先设计好Sqlite的表结构。本回答被提问者和网友采纳

Entity Framework 何时打开和关闭数据库连接?

【中文标题】Entity Framework 何时打开和关闭数据库连接?【英文标题】:When does Entity Framework open and close Database Connections? 【发布时间】:2010-11-19 22:34:10 【问题描述】:

当我在实体框架中实例化我的“实体”对象并使用该实体对象进行几个查询时,连接会发生什么情况?

在我实例化对象时它会打开一个连接,并在我处理它时关闭它吗? 或者它是否会为我执行的每个查询打开和关闭一个连接?

在任何一种情况下,是否有可能改变它,让它做另一件事?

【问题讨论】:

哇 @pb2q 对一个 6 年前的问题进行了非常重要的修改!做得很好! dMagiola:没问题。乐于帮助任何改进:重要或其他,旧的或新的。继续问哥们! 【参考方案1】:

基本上,它在调用请求时打开,并在结果处理或使用后关闭。您可以使用对象上下文手动打开/关闭或使用相同的连接...

这篇文章有更完整的解释—— http://msdn.microsoft.com/en-us/library/bb738582.aspx (archive.org)

这是使用实体连接的方法 - http://msdn.microsoft.com/en-us/library/bb738461.aspx (archive.org)

【讨论】:

两个链接都失效了【参考方案2】:

EF6 中的行为有所改变,允许您传入打开的连接或稍后自己打开 EF 连接。查看https://msdn.microsoft.com/en-us/library/dn456849(v=vs.113).aspx

【讨论】:

非常感谢您的链接 - 有没有办法通过 c# 的 using 子句声明打开的连接?例如using(var conn = openAConnection())。您共享的链接显示了手动打开连接,当相关上下文被释放时,该连接被关闭,这看起来非常不直观和 hacky。 @aaaaaa - 也许您正在查看 EF5 和前面的示例?在第二个代码示例中是您想要的 using 子句。请注意,如果您真的想手动使用连接做某事,您只需要担心这一点,例如在 EF 之外执行语句。如果您不需要,那么您根本不需要考虑打开和关闭连接。 “ES6 和未来版本中的行为”:conn.Open();。这就是让我恼火的台词。是的,我显然需要它从存储过程中获取多个结果集(试图将 db 请求保持为每个视图一个) 啊,我明白你的意思了。好吧,我想这是一个 ADO 的事情,你总是必须在单独的方法调用中打开一个连接。从表面上看,似乎拥有一个打开它的构造函数会更容易(也许有一个?)......但它并没有那么糟糕,它确实使它变得很好和明确。当您手动使用数据库连接时,我认为显式很好,因为它更容易准确地看到正在发生的事情,这通常是不引入细微错误所必需的。 如果您不喜欢隐式关闭的不对称性,您可以随时手动关闭()连接。

以上是关于如何用Entity Framework 6 连接Sqlite数据的主要内容,如果未能解决你的问题,请参考以下文章

如何用Entity Framework 6 连接Sqlite

如何用Entity Framework 6 连接Sqlite数据

Entity Framework 6 的动态 MySQL 数据库连接

Entity Framework 6 设置连接字符串运行时

如何为 ASP.net Core 配置 Entity Framework 6

Entity Framework 6 Recipes 2nd Edition(10-9)译 -> 在多对多关系中为插入和删除使用存储过程