c# - 使用 Dynamics Navision 表的实体框架代码优先
问题描述
我有一个项目,我需要使用现有数据库设计一个代码优先实体系统。数据库中的这些现有表不仅仅是任何表,它们是由 Microsoft 的 ERP 工具“Dynamics Navision”创建的。Navision 工具保存不同的公司信息并为每个公司创建不同的表格。假设有 3 种类型的表;
- 表 X
- 表Y
- 表Z
还有3家不同的公司;
- A公司
- B公司
- 公司C
该工具根据上述组合创建了 9 个不同的表格。它只是复制所有表并将公司名称的前缀添加到表名称中。最后,我们的数据库是这样的;
- 公司A$TableX
- 公司A$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
的表字段;
- ID
- 姓名
- 姓
- 地址
- 电话号码
CompanyB$TableX
的表字段;
- ID
- 姓名
- 姓
- 地址
- 电话号码
- 电子邮件
如您所见,该Email
字段是额外的,但是表名相同(TableX),只有公司不同,在我的系统中,它们共享相同的实体类,并且在运行时确定了公司名称,正如我之前提到的。
所以,我想知道我怎样才能做到这一点。根据所选择的公司,我如何可以只有一个实体类,但在该类的字段中是动态的。我想知道技术上是否可行,如果可行,如何实现。提前致谢。
解决方案
你所说的关于 Nav 的说法是不正确的。不可能在 Nav 中创建每个公司具有不同结构的同一个表。即使是现代扩展架构也不会给你那种结果。
推荐阅读
- javascript - 如何将 JSX 存储在变量中?
- angularjs - 如何为我的 chrome 扩展获取浏览器的角度版本?
- reactjs - 使用 Hooks 更新 React 中相应项目的对象数组内的值的 prevState
- android - Viewpager android中使用的分页Arraylist
- mysql - Digital Ocean / Nginx / MySQL / MVC 部署
- python - 在detectron2中,如何在对象检测中仅在没有标签(类名)的图像上绘制边界?
- python - Python for循环csv并发
- python - 如何在 Jupyter 的 URL 中传递密码?
- typescript - Msgraph - 从 msgraph api 下载 .eml 作为 itemAttachment
- ios - 如何在不使用 GoogleMap API 的情况下表达最近的地铁站名称?(iOS,斯威夫特)