是否可以在 Code First Entity Framework 中使用 JSON 文件作为后端存储?

Posted

技术标签:

【中文标题】是否可以在 Code First Entity Framework 中使用 JSON 文件作为后端存储?【英文标题】:Is it possible to use JSON file as backend storage in Code First Entity Framework? 【发布时间】:2020-10-12 18:06:05 【问题描述】:

首先我说的是 Win10 上的 WinForms 项目,而不是 ASP.NET,以防有人愿意回答 ASP.NET。

现在,我将使用具有代码优先方法的实体框架,过去我在 SQL 和 SQL Lite 中使用过很多次。

我的问题是,如果我不想使用 SQL/Lite 作为 backend 而是使用 JSON 怎么办?我注意到一个不错的 WPF 应用程序将其所有关系数据存储在 JSON 文件中,但我似乎找不到任何关于使用 JSON 作为我的后端 RDBMS 的信息。不会是大型数据库,但绝对是关系型数据。

我使用实体框架、Winforms、.NET 和 C#。我想要这样的东西:

class Top 
   public int ID get;set;
   public string Title get;set;
   public TagInfo MainTag get;set;
   public HashSet<TagInfo> TagCatalog get;set;


class TagInfo 
   public int ID get;set;
   public string TagName get;set;
   public Color  TagColor get;set;
   public DogInfo Dog get;set;


class DogInfo 
   public int ID get;set;
   public string DogName get;set;
   public Color  DogColor get;set;

我说的是,当我序列化Top 时,我不希望Top.MainTag 被序列化为完整的TagInfo,而只是它的ID,因为所有标签信息都已经在TagCatalog 属性上。

【问题讨论】:

【参考方案1】:

你不需要 EF。只需使用 JSON 序列化程序将一堆对象保存并加载到文件中。

【讨论】:

@david-browne-microsoft 谢谢!不幸的是,MS JSON 似乎被破坏了。我可以序列化我的对象,但它不会反序列化它(并且没有给出错误) 然后发布一个新问题,其中包含类定义和序列化/反序列化代码。 如果你是 MS 你可能想看看***.com/questions/63252221/…,因为我认为这是一个错误。无论如何,我决定删除 MS 代码并改用 Newtonsoft,那个效果很好。 我一直在探索这个主题。我有一个应用程序,它现在使用 Newtonsoft.Json 将其大部分数据存储在 JSON 文件中,但我最初的问题是我的***类具有属性,其中一些(本例中为 MainTag)不应序列化为整个 TagInfo 但只引用它,因为 TagCatalog 将作为 TagCatalog 属性序列化的一部分作为整体序列化。 要么更改模型以添加 IsMainTag 属性并使用它来查找 MainTag,要么执行以下操作:newtonsoft.com/json/help/html/PreserveObjectReferences.htm

以上是关于是否可以在 Code First Entity Framework 中使用 JSON 文件作为后端存储?的主要内容,如果未能解决你的问题,请参考以下文章

virtual 关键字在 Entity Framework 4.1 POCO Code First 中可以产生啥影响?

如何使用 Entity Framework Code First 让我的数据库播种?

Entity Framework 6 + Code First + Oracle 12c 的示例

Entity Framework Code First 不允许Entity直接实现接口

将相关数据添加到 Entity Framework 5 (Code-First) 中的交叉引用表

Entity Framework Code First