EF4 и общий подход к базе данных - PullRequest
1 голос
/ 12 июля 2011

У меня есть общая таблица для хранения таких отношений:

 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() добавить новое отношение к компании и сохранить его. Это сложная часть.

Есть предложения? (Я должен продолжать использовать эту структуру таблицы, хотя)

1 Ответ

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

Вы должны работать с этим точно так, как вы определили его в базе данных. У вас будет Company сущность, Person сущность, Relationship сущность, и все ваши реальные отношения будут поддерживаться в виде строк в последней упомянутой сущности.

Структура сущностей зависит от правильной (предполагаемой) архитектуры базы данных и не предлагает сопоставления, управляемые данными. Как только вы задействуете какую-либо абстракцию уровня базы данных, вы не сможете разложить ее по структуре сущностей обратно на предполагаемую концептуальную модель. Вам нужна совершенно новая сборка слоя базы данных из представлений базы данных и хранимых процедур, чтобы создать мост между дизайном, ожидаемым EF, и вашим дизайном. Только после этого соединительного SQL вы сможете использовать что-то вроде company.Relationships

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...