C#使用实体框架使用多个应用程序连接单个数据库

C#使用实体框架使用多个应用程序连接单个数据库,c#,.net,sql-server,asp.net-mvc,entity-framework,C#,.net,Sql Server,Asp.net Mvc,Entity Framework,我目前正在开发一个Windows窗体应用程序,我计划在云上运行该应用程序,该应用程序将计算新数据,在数据库中进行更新,并充当我希望使用ASP.NET MVC 5 Web API创建的实时数据源RestFul API的控制面板 我想知道将这两个独立的应用程序连接到一个数据库是否可行?我不太可能遇到数据库条目冲突问题,因为每个应用程序都有一个单独的任务来读取或写入某些表的数据 如果可行,这是否意味着每次更改表时都必须更新实体框架数据库模型?(不是一件大事) 有更好的解决办法吗?我是否应该放弃运行Wi

我目前正在开发一个Windows窗体应用程序,我计划在云上运行该应用程序,该应用程序将计算新数据,在数据库中进行更新,并充当我希望使用ASP.NET MVC 5 Web API创建的实时数据源RestFul API的控制面板

我想知道将这两个独立的应用程序连接到一个数据库是否可行?我不太可能遇到数据库条目冲突问题,因为每个应用程序都有一个单独的任务来读取或写入某些表的数据

如果可行,这是否意味着每次更改表时都必须更新实体框架数据库模型?(不是一件大事)

有更好的解决办法吗?我是否应该放弃运行Windows窗体应用程序来控制公共API后端的某些元素的想法


如果有这样的设计,将来会有什么问题?

创建一个数据访问层,作为一个单独的组件

像DAL.dll一样

每个应用程序都有一个逻辑层,处理“您所做的一切”

现在,每一层都使用一种Interfacelayer,它将对象从应用程序的任一层转换为DAL的对象

现在更改DB时,只需更新接口层即可

(当然,如果要添加更多功能,则必须更新所有图层,但这并没有什么不同

我建议使用这种方法,因为它将使调试任务变得更加容易。而且,轻微的额外代码开销不会影响性能,除非您有大量的通信需求

如果您想了解更多细节,我需要两个程序中的类示例,以及您的SQL表设计


但是您的方法没有任何问题。

因此,假设您有一个分层的体系结构,那么您有很多选择:

  • 共享您的数据库、DAL和业务层
  • 扩展WEB API并在WinForms中使用它
  • 仅重用DAL(这不是最好的方法,因为业务系统不仅是数据,而且是驻留在业务层中的行为)
  • 仅共享数据库-这是最糟糕的选择,有许多缺点
  • 请参见图像上的选项1和2:


    你能详细介绍一下我计划在云计算环境下运行的Windows窗体应用程序吗?我想主要的问题是-这两个应用程序真的需要相同的数据吗?另外,如果它们使用相同的数据,这两个应用程序对这些数据的操作是否会不同,例如,你能在WinForms应用程序中做一些在WebAP中做不到的事情吗我和反之亦然?是的,他们需要使用一些相同的数据。我在主要帖子中说,每个应用程序都有一个单独的读/写数据的任务。我不认为两个应用程序都需要向同一个表中添加新数据的功能,但是一个应用程序可以添加新行,另一个应用程序可以在使用数据后编辑数据。我已经发布了一个答案,请查看。我想知道你为什么建议统一业务逻辑层?为什么在同一个区域中包含两个唯一应用程序的方法?这不会使代码变得混乱,并增加高耦合的风险吗?@MortenBork,根据我的经验,如果你的应用程序不仅仅是简单的CRUD,而是它背后确实有一些复杂的业务逻辑,最好使用DDD进行建模。在这种情况下,您的数据应该与您的行为(业务逻辑、验证等)共存。例如,想象一个场景,客户可以成为“特优”如果他用一笔特定的钱进行购买就好了。在不共享业务逻辑的情况下,你如何执行它?你重复了你的逻辑吗?@MortenBork,据我所知,你说这两个应用程序的数据是重叠的。我想也会有一些业务逻辑重叠。应该共享而不是重复。如果你如果有一组不共享的API,请随意提取一个额外的层-应用程序服务层,该层将包含非sharedwell的独特逻辑,如果成为premium根据您使用的应用程序而不同呢?如果premium甚至不是相同的状态呢?重复是维护负担之母。顺便说一句,我是不是作者,我只是原始问题的一张海报。不是用户是否相同,而是premium,与应用程序相比,在移动应用程序上可能意味着不同的东西。然而,用户是相同的,他们的订阅可能是相同的,从而引发了不同的设计。在任何情况下,拥有独立业务层的轻微开销考虑到UI将具有不同的功能,可能会导致分裂,但我认为我们需要让OP指定工作流,以便更具体。