是否可以在 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直接实现接口