我们的一些应用程序使用以下示例中的多个数据库 - 每个数据库都在各自的DBML文件中。问题是,MVC按惯例将它们全部放在导致类名冲突的namespace AppName.Models
中。
两个选项中的哪一个是更好的解决方法以及原因:
1。)将它们放在不同的命名空间中。为了让stylecop / resharper高兴,他们会进入他们自己的子文件夹:
**但现在在代码中,它们的所有用途都必须是Live.Customer
和Crm.Customer
来区分对象。
Models
文件夹中的子文件夹的专家的其他示例代码。最重要的是,为了保持Helper
文件代码重用的相同命名 - 即使只使用一个数据库的应用程序也需要Models
中的子文件夹,我当然不会看到人们在MVC中做的事情< / H3>
2.。)在一个或两个DBML设计器中使用前缀添加所有对象名称。这是我目前的做法。 Live数据库包含Customer
和Order
个对象,而Crm数据库包含CrmCustomer
和CrmOrder
。它们都保留在同一名称空间和/Models
文件夹中。然而,这有两个主要缺点:
CrmCustomer.CrmOrders.First().CrmOrderType
Marsha Marsha Marsha Helper
文件中,我们必须进行大量的查找/替换。这在Helper
文件中尤其明显,这些文件会添加到每个应用程序中,例如错误/活动日志记录。所以我想听听其他专家他们使用的两种策略中的哪一种,或完全不同的东西。在数据库之间至少存在一些名称冲突似乎很常见。感谢
示例表名称:
实时数据库:
Intranet数据库:
CRM工具数据库:
答案 0 :(得分:1)
如果我正确理解您的问题,您还有两种可能的解决方案:
您可以修改DBML生成的实体的命名空间。假设您使用T4模板生成它们,您可以右键单击* .tt文件,然后转到属性。有一个名称空间属性,您可以将其设置为您自己的自定义名称空间:
第二个类似的选项是让每个dbml和生成的类包含在它们自己的项目中,以及它们自己的命名空间。所以在这种情况下,您将有三个新项目:
然后,您希望在使用它们时添加对项目的引用。
在我看来,这样做的好处是,明天你很可能有一个项目需要引用Live,CRM和一个全新的数据库。在这种情况下,您只需依赖于您已经创建的项目(二进制文件或代码 - 我的首选项是二进制文件,但是YMMV),并且第二个项目的该部分已完成。
在我看来,不要装饰你的课程(你的选择2)。这将很难维持。 您的选项1没有任何内在错误,我也已经这样做了,但对于我目前的大多数解决方案,我都会为可重用性因素创建项目。
答案 1 :(得分:0)
因此,我质疑导致您在代码中需要两个相同数据库的设计。除此之外,我认为选项1更好。这是我的理由:
using
级别指定,而不是在每个单独的代码引用中指定。在需要两者的类中,在任何一种情况下都不会避免使用前缀。所以选项#1在唯一重要的情况下胜出。