首页 > 解决方案 > 使用 Dynamics Navision 表的实体框架代码优先

问题描述

我有一个项目,我需要使用现有数据库设计一个代码优先实体系统。数据库中的这些现有表不仅仅是任何表,它们是由 Microsoft 的 ERP 工具“Dynamics Navision”创建的。Navision 工具保存不同的公司信息并为每个公司创建不同的表格。假设有 3 种类型的表;

还有3家不同的公司;

该工具根据上述组合创建了 9 个不同的表格。它只是复制所有表并将公司名称的前缀添加到表名称中。最后,我们的数据库是这样的;

到目前为止我做了什么?

如您所见,有机会在实体框架端简化此架构。为了实现这一点,我为 TableA、TableB、TableC 创建了 3 个实体类,在运行时,我让用户选择一家公司,根据选择的公司,我用一个自定义的实体类来反映我的实体类,TableAttribute其中表名前缀为公司名称。我现在不打算详细说明我是如何实现它的(但你可以在这篇文章中找到实现细节: LINK),但到目前为止一切都很好,我已经成功应用了前面的所有步骤,并且我设法在桌面上保持动态与所选公司的名称。但是,还有另一个问题。

我的问题是什么?

问题是,即使我设法创建了一个系统,我可以在运行时更改实体类的表名属性并访问目标公司表,但不能保证具有不同公司名前缀的重复表共享 %100相同的内场架构。例如,CompanyA$TableX可以有 5 个字段,而CompanyB$TableX有 6 个字段,其中前 5 个字段与 CompanyA$TableX 的字段相同,但最后 1 个字段是额外的。让我们也可视化它;

CompanyA$TableX的表字段;

  1. ID
  2. 姓名
  3. 地址
  4. 电话号码

CompanyB$TableX的表字段;

  1. ID
  2. 姓名
  3. 地址
  4. 电话号码
  5. 电子邮件

如您所见,该Email字段是额外的,但是表名相同(TableX),只有公司不同,在我的系统中,它们共享相同的实体类,并且在运行时确定了公司名称,正如我之前提到的。

所以,我想知道我怎样才能做到这一点。根据所选择的公司,我如何可以只有一个实体类,但在该类的字段中是动态的。我想知道技术上是否可行,如果可行,如何实现。提前致谢。

标签: c#entity-frameworkmicrosoft-dynamicsnavision

解决方案


你所说的关于 Nav 的说法是不正确的。不可能在 Nav 中创建每个公司具有不同结构的同一个表。即使是现代扩展架构也不会给你那种结果。


推荐阅读