У меня есть общая таблица для хранения таких отношений:
CREATE TABLE Relationship (
[ID] [bigint] IDENTITY(1,1) NOT NULL,
[FromMemberID] [bigint] NOT NULL,
[FromMemberType] [varchar](255) NOT NULL,
[ToMemberID] [bigint] NOT NULL,
[ToMemberType] [varchar](255) NOT NULL,
[RoleDescriptorID] [bigint] NULL)
И у меня есть еще несколько таблиц, которые участвуют в отношениях:
CREATE TABLE Company (
[ID] [bigint] IDENTITY(1,1) NOT NULL,
[Name] [nvarchar](255) NOT NULL)
CREATE TABLE Person (
[ID] [bigint] IDENTITY(1,1) NOT NULL,
[Name] [nvarchar](255) NOT NULL,
[Email] [nvarchar](255) NOT NULL)
etc.
Таким образом, отношения хранятся так:
ID | FromMemberID | FromMemberType | ToMemberID | ToMemberType | RoleDescriptorID
---------------------------------------------------------------------------------
1 | 1 | Person | 1 | Company | 1 (Contractor)
1 | 2 | Person | 1 | Company | 2 (Employee)
1 | 2 | Company | 1 | Company | 3 (Customer)
Как мне представить его в модели Entity Framework, чтобы я мог легко работать с отношениями каждого объекта? Например, я хотел бы иметь возможность сделать это:
company.Relationships.ToList()
, чтобы выбрать все отношения между компанией и всеми
другие объекты (я могу сделать это, создав представление и сопоставив его в модели EF через ассоциацию)
company.Relationships.Add(..); context.SaveChanges()
добавить новое отношение к компании и сохранить его. Это сложная часть.
Есть предложения? (Я должен продолжать использовать эту структуру таблицы, хотя)