【发布时间】:2017-06-27 16:03:12
【问题描述】:
我们正在公司内开发一套应用程序。每个应用程序都有不同的业务逻辑,但共享一些结构。例如,一个应用程序用于“IT 服务”,另一个应用程序用于公司不同建筑物之间的“包裹处理系统”。我们希望使用单独的 asp.net mvc 项目(实体框架代码优先)创建每个应用程序。但问题是所有应用程序都有一些相似的实体。例如,它们的dbContext 中都有People、Buildings 和Floors 实体。并且还有一些其他的表与这个类似的表有关系
设计此应用程序的最佳方法是什么?
- 为所有应用程序创建一个数据库?什么是副作用?
- 为每个应用程序创建单独的数据库并复制相似的表? (目前我们正在处理这个问题,但我们应该编写一些 SQL 服务器作业来始终同步这些表。所以我认为这不是一个好方法)
- 为共享表创建一个数据库,并为每个应用程序创建另一个数据库。这将导致表之间的关系丢失,并且还会产生多上下文应用程序(我更喜欢这个,但我读到使用 Code-First EF 和 linq,不可能跨多个上下文进行查询)
- 还是别的什么?
【问题讨论】:
-
你正在做的是让别人为你做艰苦的工作。你已经尝试了什么?你能回答你自己的问题吗?此外,如果代码共享实体,您可以创建一个单独的项目,将其编译为 .dll 并在项目之间共享。
-
People、Buildings和Floors实际上都是相同的数据吗?即ITServices.People中的一行可以指代PackageHandling.People中的同一个人吗?如果是这样,我看不出#2 是一种合理的方法。此外,如果您的数据库系统支持同义词,您的#3 解决方案可能具有引用完整性,并且不需要多个上下文。在这种情况下,它在功能上与#1 非常相似。而且您需要在共享表上制定适当的锁定机制。 -
感谢@setphen.vakil。我正在研究同义词的想法
-
4.听起来您可能受益于微服务......即,一个或多个(最好是更多)Web 服务只能在您的组织内部访问。每个微服务都知道如何处理所有可能特性的单个切片的数据(相关表)。在此架构中,数据访问发生在单个应用程序——Web 服务中。您公开每个 MVC 应用程序使用的端点。
标签: asp.net-mvc entity-framework linq database-design