【问题标题】:Best Approach for shared entities (Tables) among multiple applications多个应用程序之间共享实体(表)的最佳方法
【发布时间】:2017-06-27 16:03:12
【问题描述】:

我们正在公司内开发一套应用程序。每个应用程序都有不同的业务逻辑,但共享一些结构。例如,一个应用程序用于“IT 服务”,另一个应用程序用于公司不同建筑物之间的“包裹处理系统”。我们希望使用单独的 asp.net mvc 项目(实体框架代码优先)创建每个应用程序。但问题是所有应用程序都有一些相似的实体。例如,它们的dbContext 中都有PeopleBuildingsFloors 实体。并且还有一些其他的表与这个类似的表有关系 设计此应用程序的最佳方法是什么?

  1. 为所有应用程序创建一个数据库?什么是副作用?
  2. 为每个应用程序创建单独的数据库并复制相似的表? (目前我们正在处理这个问题,但我们应该编写一些 SQL 服务器作业来始终同步这些表。所以我认为这不是一个好方法)
  3. 为共享表创建一个数据库,并为每个应用程序创建另一个数据库。这将导致表之间的关系丢失,并且还会产生多上下文应用程序(我更喜欢这个,但我读到使用 Code-First EF 和 linq,不可能跨多个上下文进行查询)
  4. 还是别的什么?

【问题讨论】:

  • 你正在做的是让别人为你做艰苦的工作。你已经尝试了什么?你能回答你自己的问题吗?此外,如果代码共享实体,您可以创建一个单独的项目,将其编译为 .dll 并在项目之间共享。
  • PeopleBuildingsFloors 实际上都是相同的数据吗?即ITServices.People 中的一行可以指代PackageHandling.People 中的同一个人吗?如果是这样,我看不出#2 是一种合理的方法。此外,如果您的数据库系统支持同义词,您的#3 解决方案可能具有引用完整性,并且不需要多个上下文。在这种情况下,它在功能上与#1 非常相似。而且您需要在共享表上制定适当的锁定机制。
  • 感谢@setphen.vakil。我正在研究同义词的想法
  • 4.听起来您可能受益于微服务......即,一个或多个(最好是更多)Web 服务只能在您的组织内部访问。每个微服务都知道如何处理所有可能特性的单个切片的数据(相关表)。在此架构中,数据访问发生在单个应用程序——Web 服务中。您公开每个 MVC 应用程序使用的端点。

标签: asp.net-mvc entity-framework linq database-design


【解决方案1】:

我对数据库管理系统很感兴趣。我首先喜欢你的 3 方法。他们都有不同的优点和缺点。如果您在此数据库上有大量数据,您可以使用类似 2 的单独数据库解决方案。但是您必须开发您所说的同步机制。如果我们看一下单独数据库的另一个优点,即当一个数据库发生故障或损坏时,另一个数据库可以工作:) 但是某些部门数据在错误修复之前可能不可用。这对于大型系统来说可能是件好事。

最后,“为共享表创建一个数据库,为每个应用程序创建另一个数据库”,这个想法太好了:)

您可以使用至少 3 层的 N-Tier artitecture(Business-Presentation-Data) 和

业务==>您的工作人员职能

数据层==> 许多 Db 上下文

演示 ==> MVC 项目

我认为解决方案 3 和 Lose Coupling Connection with N-Tier Artch 是最好的方法。

最后请你搜索一下; 工作单元、Ninject Freamwork、N-Tier 主题

注意:始终是代码优先 :) 我非常喜欢 Code First 风格:D

祝你有美好的一天:)

如果你愿意,我可以展示一些围绕“CodeProject.com”和 Stackoverflow 的 N 层结构课程链接

【讨论】:

    猜你喜欢
    • 2011-11-06
    • 2013-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-22
    • 1970-01-01
    相关资源
    最近更新 更多