EF Core 3.1 Code First Table с множеством самореферентных отношений - PullRequest
0 голосов
/ 01 мая 2020

Я не нашел решения EF Core для этого вопроса, я нашел только о более старых версиях EF, а не CORE.

У меня следующая ситуация:

Компания имеет таблица Employee.

int EmployeeID
string FirstName
string LastName

Теперь каждый сотрудник также может быть менеджером или помощником или ... Но, конечно, менеджер тоже просто работник. И у сотрудника есть один или несколько менеджеров, и у менеджера может быть один помощник, но помощник может принадлежать более чем одному менеджеру. У большинства сотрудников не будет помощника.

Вопрос теперь, в EF Core, как лучше всего справиться с этим? Помните, что сотрудник может иметь более одного менеджера, а помощник может принадлежать более чем одному менеджеру. Так можно ли сначала это кодировать в одной таблице, или вам нужно разделить это?

Например: Таблица сотрудников и мы добавляем:
Виртуальный помощник списка Виртуальный диспетчер списка

Когда я проверял это, это не сработало, очевидно, вы просто не нашли много хорошей информации об этом в inte rnet ... Я думаю, это то, что просто не так много для go, и просто попробуйте разделить как можно больше? Как создание таблицы Employee, таблицы Manager, в которой вы связываете ManagerId, чтобы он соответствовал EmployeeId, и создаваете таблицу соединения, например EmployeeManager.
Просто интересно, возможно ли это все еще в одной таблице с определенными аннотациями.

Интересно как бы это сделать, если бы вы сначала go для БД ...

Спасибо за ваше понимание мира EF Core!

1 Ответ

0 голосов
/ 06 мая 2020

Хорошо, сначала я попробовал это в БД, чтобы я мог научиться у обратного инженера простому POCO

Это запрос slq:

CREATE TABLE Сотрудники (EmployeeId INT NOT NULL, Фамилия NVARCHAR (100), GivenName NVARCHAR (100), EmailAddress VARCHAR (254), ContractType CHAR (1), LeaveTimeRemaining DECIMAL (4,2), LeaveTimeTaken DECIMAL (4,2), первичный ключ) ( EmployeeId));

СОЗДАТЬ СТОЛ (AssistantId INT REFERENCES Сотрудники (EmployeeId), ApproverId INT REFERENCES Сотрудники (EmployeeId), CONSTRAINT FK_ApproverAssistant PRIMARY КЛЮЧ (ApproverId, AssistantId));

СОЗДАТЬ ТАБЛИЦУ ИНДИВИДУАЛЬНЫЙ НАЗНАЧЕНИЕ Employee (Employee) (EmployeeId) , EmployeeId INT, RecordMessage NVARCHAR (254), RecordModifiedDate SMALLDATE TIME, RecordModifiedById INT, FOREIGN KEY (EmployeeId) ССЫЛКИ Employees (EmployeeId), FOREIGN KEY (RecordModifiedById) REFERENCES Employees (EmployeeId));

Таким образом, я сохранял таблицы, так как информация для утверждающего является подтверждающей и в таблице сотрудников.

...