我正在尝试使用.NET Entity Framework 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>
用于Product对象和Service对象。由于它们与单个表没有关联,我不知道如何在EDMX文件中建模这种关系。
我的最终目标是能够在WCF数据服务上调用方法,并返回一个JSON响应,该响应的序列化产品包含其元数据列表。
答案 0 :(得分:1)
执行此操作的一种方法是为具有元数据的每个表创建计算列或带有附加列的视图,并使用表的名称填充附加列。
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和METADATA之间建立FK关系。然后可以将这两个字段映射为complex type,并且可以在EF中形成METADATA表和PRODUCT_VIEW之间的关系。