Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#MongoDB存储库体系结构_C#_Mongodb_Repository Pattern - Fatal编程技术网

C#MongoDB存储库体系结构

C#MongoDB存储库体系结构,c#,mongodb,repository-pattern,C#,Mongodb,Repository Pattern,我们的项目最近使用官方10gen驱动程序从SQL数据库迁移到noSQL数据库(mogoDB)。该项目基于MVVM,使用Prism框架 我们使用的是通用存储库-每个集合的存储库 这里有几个问题: repistory应该只包含基本的CRUD操作,还是可以 还有更具体的操作,例如基于用户的获取 在某些特定值上 出于绑定目的,我们需要某种自动映射 问题是,应该在哪一层进行?例如:“书” 具有“AuthorId”,但在View/ViewModel中,我们绑定到 'Book.Author.name'('Au

我们的项目最近使用官方10gen驱动程序从SQL数据库迁移到noSQL数据库(mogoDB)。该项目基于MVVM,使用Prism框架

我们使用的是通用存储库-每个集合的存储库

这里有几个问题:

  • repistory应该只包含基本的CRUD操作,还是可以 还有更具体的操作,例如基于用户的获取 在某些特定值上

  • 出于绑定目的,我们需要某种自动映射 问题是,应该在哪一层进行?例如:“书” 具有“AuthorId”,但在View/ViewModel中,我们绑定到 'Book.Author.name'('Author'而不是'authord'将被取消映射 当然是财产)

  • 从另一个通用存储库访问某个存储库是否是一种良好的做法 存储库?它们应该彼此可见吗


  • 最后,我们决定采用以下方法:

  • 通用存储库(每个集合的存储库)包含基本的CRUD操作和基于某些特定值获取实体的简单方法—严格来说是数据访问方法

  • ViewModel层提供“完成”未映射属性,而不是存储库层

  • 因此,存储库之间不需要交叉引用


  • 对于基于SQL的实现,您是如何回答这些问题的?它不一定需要不同。有很多方法可以做到这一点,答案会有很大的不同。此外,您可能会发现您的数据结构需要重新思考<例如,code>Book.Author.Name可能需要额外的查询。您需要更复杂的“自动映射器”来处理这些类型的请求。@WiredPairie-在SQL实现中,存储库包含“使用模式”(由于使用dbcontext)和“更高级别”的数据访问操作(不仅仅是纯CRUD)。现在没有上下文。我不确定存储库的最佳实践是什么,是公开集合并只提供CRUD操作,还是保持集合私有并提供CRUD操作(一些查询方法)。我个人发现执行CRUD+操作是一种合理的模式,特别是MongoDB CRUD-only操作一般来说不是很有用(太有限了)。投票结束。3个问题,而不是FAQ中所述的一个具体问题。