使用实体框架6将数据从数据库存储到本地

Posted

技术标签:

【中文标题】使用实体框架6将数据从数据库存储到本地【英文标题】:Store data from database to local using entity framework 6 【发布时间】:2015-04-24 11:16:36 【问题描述】:

我有数据存储在 mysql 数据库中,我通过实体框架 6 访问它。我想做的是提取数据并以独立于服务器的方式存储它,以便我可以在引导更大数据库的未来(来自 MySQL 的数据只是其中的一小部分)。目标数据库不是 MySQL。

MySQL 数据之前在那里,所以我使用 Database First。对于新数据库,我使用 Code First。 MySQL 数据也需要一些清理,这在代码中完成。所以工作流程是:

    首先使用 Entity Framework 数据库从 MySQL 读取数据 在代码中优化/增强/纠正它 先使用代码存储在另一个数据库中

所以我的第一个想法是使用 SQLite,但遗憾的是,Code First is not supported。

使用其他格式(即 XML/DataSets/CSV)来存储数据需要我重新实现导入代码。

现在我没有找到另一个支持实体框架的嵌入式数据库。由于实体框架适用于关系数据库,我会说 Redis(或其他 NoSQL 数据库)无法解决问题。

我还认为,如果使用 IKVM.NET “转换”H2,然后使用 H2 作为 SQLite 替代品是一种选择——但由于 IKVM.NET 不支持某些内部依赖性,这可能会失败。

所以我很高兴得到以下问题的答案:

    H2 方式会起作用吗?是否有稳定/有效的 ADO.NET 提供程序? 我不太关心本地存储格式(也可以是 JSON 等)——有什么不是 SQL,而是提供 Enitity Framework 支持? 我错过了什么吗?有没有我还没有看到的方法?

以下是我偶然发现的一些相关问题,这些问题涉及使用实体框架来使用文件的可能性:

Entity Framework with text files (no database!) A list of Entity Framework providers for various databases Entity Framework with XML Files Microsoft Entity Framework using a flat file as a data source

【问题讨论】:

您真的需要 EF 为您创建数据库表吗?手动创建数据库表会不会有太大的负担?大多数定义可能需要对 MySQL 版本进行细微更改。之后,您可以使用 Code First 方法。据我所知,SQLite 驱动程序唯一缺少的是基于代码创建数据库表。 是和不是。我正在寻找“最少工作”的解决方案。如果我自己创建创建语句,我还有额外的工作。目前我正在检查“从 DB 导出到 XML 并手动填充目标上下文”方法。这也是一项额外的工作,但给我带来了好处,即可以轻松修改 XML 文件(即更正拼写错误)。 【参考方案1】:

没有完整的解决方案,但有很多现成的零件:

本项目在IKVM.Net之后包装了H2的编译Jar 使用实现 ADO.Net 接口的类 允许在 .Net 项目中轻松使用: https://code.google.com/p/h2sharp/

用于 SharpHSQL 的 EF 提供程序(不起作用,因为 SharpHSQL 太旧了,它是 Hypersonic 1.4 的端口): https://github.com/ArsenShnurkov/SharpHSQL/tree/master/src/SharpHsql.Linq

这里是构建过程的描述: https://groups.google.com/forum/#!topic/h2-database/QAvFqbyd4_0 https://code.google.com/p/h2sharp/wiki/BuildingH2Sharp

以上代码的作者写了这么多的代码做得很好,所以我认为再写一些来完成你的任务并没有错。

【讨论】:

以上是关于使用实体框架6将数据从数据库存储到本地的主要内容,如果未能解决你的问题,请参考以下文章

如何使用实体框架将 RichTextBox 内容存储到 WPF 中的 SQLServer 数据库

Entity Framework 6 将存储过程添加到数据模型后无法构建

如何通过键从 GAE 数据存储中删除多个实体

在实体框架数据库优先方法中,如何从存储过程返回多个结果集?

具有存储库模式的实体框架,将数据插入到具有多对多关系的表中

如何从实体框架中的存储过程中获取结果+数据库优先