Как смоделировать нестандартные отношения в EDMX? - PullRequest
0 голосов
/ 21 июля 2011

Я пытаюсь смоделировать несколько нестандартные отношения, используя .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.Поскольку они не связаны с одним FK в одной таблице, я не знаю, как я могу смоделировать это отношение в файле EDMX.

Моя конечная цель - иметь возможность вызывать метод для данных WCF.Служба и возврат JSON-ответа, в котором продукт сериализован со списком его метаданных.

1 Ответ

1 голос
/ 21 июля 2011

Один из способов сделать это - создать вычисляемый столбец или представление с дополнительным столбцом для каждой из таблиц, содержащих метаданные, и заполнить дополнительный столбец именем таблицы.

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 между PRODUCT_VIEW / PRODUCT и METADATA в полях FK_ID и Type. Эти два поля можно затем отобразить как сложный тип , и в EF может быть сформирована связь между таблицей METADATA и PRODUCT_VIEW.

...