如何在EDMX中为非标准关系建模

本文关键字:非标准 关系 建模 EDMX | 更新日期: 2023-09-27 18:02:51

我正在尝试使用。net实体框架4为RESTful WCF数据服务的消费建模一个有点非标准的关系。

考虑以下简化的数据结构,其中元数据存储在单个表中,但可能关联到存储在不同表中的不同实体(由TYPE列标识)

METADATA Table
--------------
ID      FK_ID   TYPE        VALUE
--      ----    -----       -----
1       100     PRODUCT     Foo
2       101     PRODUCT     Foo
3       101     SERVICE     Bar
4       102     SERVICE     Bar
PRODUCT Table
-------------
ID      Name
--      ----
100     A
101     B
102     C
103     D
SERVICE Table
-------------
ID      Name
--      ----
100     W
101     X   
102     Y
103     Z
我面临的问题是我想创建一个属性
Product.List<Metadata> 

表示产品对象和服务对象。由于它们不与单个表的单个FK相关联,因此我不知道如何在EDMX文件中对这种关系进行建模。

我的最终目标是能够调用WCF数据服务上的方法,并返回一个JSON响应,该响应具有序列化的Product,其中包含其元数据列表。

如何在EDMX中为非标准关系建模

实现此目的的一种方法是为每个具有元数据的表创建一个计算列或一个带有附加列的视图,并用表的名称填充附加列。

CREATE VIEW PRODUCT_VIEW AS
    Select ID, Name, "PRODUCT" as Type From PRODUCT

CREATE TABLE PRODUCT(
  ID int,
  Name varchar(20),
  Type AS "PRODUCT"
)

则可以在字段FK_ID和Type上的PRODUCT_VIEW/PRODUCT和元数据之间建立FK关系。然后可以将这两个字段映射为一个复杂类型,并且可以在EF中形成元数据表和PRODUCT_VIEW之间的关系。