【问题标题】:Entity Framework Code First with Dynamics Navision Tables使用 Dynamics Navision 表的实体框架代码优先
【发布时间】: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的表格字段;

  1. 身份证
  2. 姓名
  3. 姓氏
  4. 地址
  5. 电话号码

CompanyB$TableX的表格字段;

  1. 身份证
  2. 姓名
  3. 姓氏
  4. 地址
  5. 电话号码
  6. 电子邮件

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

所以,我想知道如何才能在这方面保持活力。我如何可以只有一个实体类,但根据所选公司在该类的字段中是动态的。我想知道这在技术上是否可行,如果可行,如何实施。提前致谢。

【问题讨论】:

  • 注意说明您使用的是什么版本的导航。

标签: c# entity-framework microsoft-dynamics navision


【解决方案1】:

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

【讨论】:

  • 这是答案吗?
  • @ozanyurtsever 某种。您不需要答案,因为您对 Nav 数据库结构的假设是错误的。所以你不需要实现你所要求的。因为这种情况在导航中是不可能的。在这种情况下,它实际上会停止工作。或者您可以将 Nav 从问题中删除,然后出于好奇,这将是合法的问题。
  • Nav 正在做与我所说的完全相同的事情,我的问题非常合理。
猜你喜欢
  • 1970-01-01
  • 2018-07-07
  • 2017-07-05
  • 1970-01-01
  • 2017-09-01
  • 2014-05-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多