【问题标题】:Dealing with database changes on WCF Service application处理 WCF 服务应用程序上的数据库更改
【发布时间】:2015-02-23 14:58:15
【问题描述】:

我正在开发一个将客户端-服务器应用程序迁移到 .NET 的项目。现在我将项目分为 3 层:

* DataLayer (Entity framework) DLL
* ServiceLayer (WCF Service) DLL
* ClientLayer (WPF EXE, using MVVM pattern)

App需要连接多个数据库(结构类似)。数据库经常更改以反映新的业务需求)。

现在我的问题是:

1) 这种场景是否适合Entity Framework(因为处理 数据库更改)?

2) 在这种情况下,如果我需要添加一个新字段来表示客户表,我应该将该字段添加到数据库中,然后更新 DataLayer 上的架构,对吗?我还需要更新服务层的合同以反映代理类......并且还需要修改客户端以更改视图以获取新字段并将其发送到数据库。所以我需要为一个单一的重新编译所有三个模块 字段添加到一个表?

3) .NET 上是否有解决此问题的最佳替代方案,如果我需要向一个表中添加一个新字段,我只需要重新编译客户端代码?

谢谢!

【问题讨论】:

  • 如果我正确阅读了这个问题,那么这个问题完全与实体框架和更改数据库模式有关 - 除非我错过了问题的某些方面,否则你最好修剪 WCF不相关的东西。
  • 当您说“多个数据库(结构相似)”时,您的意思是数据库具有相同的结构,还是数据库有细微的差异?如果数据库有差异,最好举一些例子。
  • @Justin:我提到 WCF 是因为在发生数据库更改时与重新编译相关的复杂性。在提到的情况下(一个新字段添加到表中)我需要重新编译所有三层(如果我错了,请纠正我)
  • WCF 也不支持匿名类型,所以我需要明确指定所有方法返回的类型。
  • 数据库可能略有不同。表可以相同,但数据库 A 上的视图可以在数据库 B 上具有不同的列

标签: c# .net entity-framework wcf


【解决方案1】:

到目前为止,最简单的解决方案是让您的 EF 层与您的所有数据库模式一起工作,而无需使用视图重新编译。

在目标数据库中的视图上构建您的 EF 层。当您对数据库进行更改时,请确保视图已更新,以便它们的行为与以前一样。这应该意味着您的 EF 层将适用于具有这些视图的任何数据库。

【讨论】:

  • 感谢您的回答,但我不确定我是否关注您。在我的客户端中,我有两个数据库 A 和 B,具有相同的视图(例如 vw_1)。在 DBA 中,vw_1 有两列。在数据库 B 中有四个。我的客户端应用程序需要能够连接到两个数据库。那么我在 EF 上放的是哪个 DB? A、B 还是两者兼而有之?如果我两者都放,我的 WCF 服务如何返回两个不同的对象?
  • 另外,如果我需要在两个数据库上添加一个字段来表示 tableC,我是否需要重新编译所有三层才能使其工作?如果是这样的话,这是非常不灵活的。
  • @ercpap 您需要一个在两个数据库之间通用且不会更改的视图,例如efvw_1。该视图在两个数据库中应该具有相同的架构(例如 2 列),因此即使您将列添加到视图中,您也不会将其添加到 efvw_1 视图中,因此更改是隐藏的 EF 并且您不需要重新编译您的 EF 层,并且通过扩展,您也不需要重新编译其他程序集。
  • 好的。我害怕这就是答案。第二个问题呢?如果我在一个表中添加一个新字段并且需要我的应用程序从用户那里获取该字段并将其发送到数据库,我是否需要重新编译所有三个模块?谢谢!
  • @ercpap 您肯定需要重新编译需要能够“看到”该信息的应用程序部分,否则应用程序应该如何处理该信息?
猜你喜欢
  • 1970-01-01
  • 2013-09-30
  • 2011-04-25
  • 2020-02-28
  • 1970-01-01
  • 2013-11-25
  • 2010-12-21
  • 2012-01-23
  • 1970-01-01
相关资源
最近更新 更多