在实体之间建立非FK关联(最好是在设计者中)

时间:2018-04-08 19:31:51

标签: c# entity-framework entity-framework-6 associations relationship

我畏缩地问这个问题......像往常一样,我仍然坚持使用我无法控制的传统设计。

传入数据源表(键入数据源,行号和文件日期):

DATAFEED_USER" 
(
  "DATAFEED_NM" VARCHAR2(32) NOT NULL ENABLE,
  "LINE_NBR" NUMBER(6,0) NOT NULL ENABLE,
  "FILE_DT" DATE NOT NULL ENABLE,
  "NETWORK_ID" VARCHAR2(10),
  "PERNR" VARCHAR2(10),
  "COMPANY_CODE" VARCHAR2(5),
  "LOCAL_COMPANY_ID" VARCHAR2(12),
  // end identifier fields, begin user data
  "USER_TYPE" VARCHAR2(16),
  "LAST_NM" VARCHAR2(40),
  "FIRST_NM" VARCHAR2(40),
  ...
)

我们系统中的表格(键入网络ID):

USER_DESC 
(
  "NETWORK_ID" VARCHAR2(30) NOT NULL ENABLE,
  "PERNR" CHAR(8),
  "COMPANY_CODE" VARCHAR2(4),
  "LOCAL_COMPANY_ID" VARCHAR2(12),
  // end identifier fields, begin user data
  "LAST_NM" VARCHAR2(40),
  "FIRST_NM" VARCHAR2(40),
  ...
)

我需要datafeed_user实体拥有匹配的user_desc记录集合 - 记录可以通过网络ID,PerNr或公司代码+本地ID进行匹配。没有FK关系,因为(1)新用户在我们有记录之前会进入数据源,(2)只有网络ID是我们系统中的PK。

关系:

  • 网络ID:许多数据源可以发送相同的网络ID;在我们的系统中只会有一个匹配 - 多对1。
  • PerNr:只有一个数据源用户PerNrs,但它们可以匹配我们系统中的多个网络ID - 1到多个
  • 公司代码/本地ID:每个数据源都发送一个本地ID,但它们可以匹配我们系统中的多个网络ID - 1到多个

数据馈送处理查看与数据库的所有可能匹配,使用一组业务规则选择一个,并更新匹配记录。发送多个Feed的用户会被标记并且不会被处理。我们的数据库中有250k +条记录,因此我只想下拉匹配的记录进行更新。 (我只想拉下一个,但是我必须推动业务逻辑以便将记录与数据库匹配)

如何在EF设计器中定义关联/导航属性,以便我可以轻松使用相关记录?

我理解我所追求的并不是数据库术语中的真正关系,因此我对其他选择持开放态度。我迁移的代码使用类型化数据集,这些数据集已扩展为具有自定义属性(例如匹配记录的集合)。我无法在EF中干净地执行此操作,因为.cs文件是自动生成的。要求是:

  1. 对于每个数据源记录,通过三个唯一标识符之一查看我们系统中匹配的所有记录
  2. 更新我们系统中的匹配记录
  3. 不要将所有250k记录下来更新一个(绝对不要做1000次,每次数据传输记录一次)
  4. 建议?

0 个答案:

没有答案
相关问题