【发布时间】:2019-11-24 08:35:24
【问题描述】:
我有一个项目,我需要使用现有数据库设计一个代码优先实体系统。数据库中的这些现有表不仅仅是任何表,它们是由 Microsoft 的 ERP 工具 “Dynamics Navision” 创建的。 Navision 工具保存不同的公司信息并为每个公司创建不同的表格。假设有 3 种类型的表;
- TableX
- TableY
- 表Z
还有 3 家不同的公司;
- A公司
- 公司B
- 公司C
该工具根据上述组合创建了 9 个不同的表格。它只是复制所有表并将公司名称的前缀添加到表名称中。最后,我们的数据库是这样的;
- CompanyA$TableX
- CompanyA$TableY
- 公司A$TableZ
- 公司B$TableX
- 公司B$TableY
- 公司B$TableZ
- 公司C$TableX
- 公司C$TableY
- 公司C$TableZ
到目前为止我做了什么?
如您所见,有机会在实体框架端简化此架构。为了实现这一点,我为 TableA、TableB、TableC 创建了 3 个实体类,在运行时,我让用户选择一家公司,根据选择的公司,我用自定义 TableAttribute 反映我的实体类,其中表名称以公司名称为前缀。我现在不打算详细说明我是如何实现它的(但你可以在这篇文章中找到实现细节:LINK)但到目前为止一切都很好,我已经应用了前面的所有步骤成功地,我设法在所选公司的表名上保持动态。但是,还有另一个问题。
我的问题是什么?
问题是,即使我设法创建了一个系统,我可以在运行时更改实体类的表名属性并访问目标公司表,但不能保证具有不同公司名称前缀的重复表是共享 %100 相同的内场架构。例如,CompanyA$TableX 可以有 5 个字段,而CompanyB$TableX 有 6 个字段,其中前 5 个字段与 CompanyA$TableX 的字段相同,但最后 1 个字段是额外的。让我们也可视化它;
CompanyA$TableX的表格字段;
- 身份证
- 姓名
- 姓氏
- 地址
- 电话号码
CompanyB$TableX的表格字段;
- 身份证
- 姓名
- 姓氏
- 地址
- 电话号码
- 电子邮件
如您所见,Email 字段是额外的,但是表名相同(TableX),只有公司不同,在我的系统中,它们共享相同的实体类,并且公司名称在运行时确定正如我之前提到的。
所以,我想知道如何才能在这方面保持活力。我如何可以只有一个实体类,但根据所选公司在该类的字段中是动态的。我想知道这在技术上是否可行,如果可行,如何实施。提前致谢。
【问题讨论】:
-
注意说明您使用的是什么版本的导航。
标签: c# entity-framework microsoft-dynamics navision