用于表示关系数据的类对象

时间:2016-12-30 02:38:41

标签: vb.net class oop orm relational-database

我正在从事一个项目,从外部系统收集数据并将其带入我们的内部系统。我们当前的大部分系统都使用较旧的技术(经典的ASP),而我正在开发的项目需要一些较新的技术,所以我使用的是VB.Net,因此我没有太多的现有技术。建立网络基础。

我为此创建了一些非常简单的自定义类(例如,Supplier类,Location类和Product类)。这些类用于临时存储来自外部系统的数据,但其结构更适合我们的数据结构。因此,它们非常小,并且只需要什么(例如,它们不是每个表的所有列的完整对象表示)。

对于如上所述的简单独立实体,这不是问题。然而,当我开始尝试将这些独立实体联系起来时,我遇到问题的地方。为了实现这一点,我一直在为继承KeyedCollection的每个类使用其他类。这样可以快速有效地保持数据访问(例如,我可以通过键值直接查找内容,而无需遍历整个集合)。例如,我的Supplier类具有ProductCollection类型的相应Products属性(继承KeyedCollection)。这样,供应商(150)。产品(300)将指代主键为150的供应商和主键为300的产品。

我的第一个问题是:我想要一个"复制"主键为300的产品,以及其他所有参考的产品" copy"。这样,当我将外部数据的主键与内部数据的主键匹配时,我可以更新一次Product对象,任何/所有引用都将反映该更新。

我的下一个问题是:由于我遇到了一些比较复杂的关系,我遇到了没有链接表记录主键的问题。我需要供应商(150)。地点(33)。代表供应商150的产品(300)可以到达位置33以获得产品300.在数据库中,这将意味着在供应商表中有记录150的主键,以及将供应商150链接到位置33的SupplierLocation表中的记录(注意此表有自己的主键,这在我目前使用的类/结构中是不可用的 - 但是请注意说它的主键是1050),以及在SupplierLocationProduct表中将SupplierLocation 1050链接到产品300的记录(同样,该表还有它自己的主键,目前还不知道)。

根据场景,完成我需要的不同事物的最佳方法是什么?我已经看过ORM(例如实体框架),但对于我需要的几个简单类来说这似乎有些过分(但是手动完成所有操作实际上都是过度的)。

回顾一下,我想要一个"复制"每个独立实体(供应商,位置,产品),以及使用这些实体的任何内容只是一个参考原始"副本"的参考。我还需要可用的链接表记录的主键。性能也是一个重要因素,但可维护性也是如此。我不想浪费(例如,当我已经有主键可用时使用List.Contains())但同时,我对一次性节省100毫秒不感兴趣,如果它意味着编写我自己的核心功能(创建hashkeys,测试相等性等)


其他背景资料
该项目的目的是从供应商处获取产品可用性和定价信息,并将其导入我们的内部系统。位置是产品可用的地方,不同的供应商可以从相同(或不同)的位置获取产品。换句话说,位置不是特定供应商所独有的,而产品不是特定位置或供应商所独有的。

在我们的内部系统中,所有这三个实体彼此独立,但使用链接表相关。为了使事情更加复杂,供应商使用两个实体提供此信息,即Ship To和Product,其中Ship To表示一般的源和目标位置,产品代表实际产品和更具体的源位置。出于我们的目的,我们只对源位置和实际产品感兴趣。

实体示例:

  • 供应商提供Ship To" IN TO IN",Product" Widget A - Indianapolis,IN&#34 ;;我们导入供应商" IN",位置" INDY",产品" WID-A"
  • 供应商提供Ship To" IN TO OH",Product" Widget B-Indianapolis,IN&#34 ;;我们导入供应商" IN",位置" INDY",产品" WID-B"
  • 供应商提供Ship To" IN TO MI",Product" Widget B-Indianapolis,IN&#34 ;;我们忽略了这一点(我们已经有供应商" IN",位置" INDY",产品" WID-B")
  • 供应商提供Ship To" IN TO MI",Product" Widget B-Gary,IN&#34 ;;我们导入供应商" IN",位置" GARY",产品" WID-B"
  • 供应商提供Ship To" OH TO IN",Product" Widget A - Lima,OH&#34 ;;我们导入供应商" OH",位置" LIMA",产品" WID-A"

0 个答案:

没有答案