Entity Framework: как моделировать для массовых операций - PullRequest
0 голосов
/ 13 марта 2020

У меня есть несколько классов сущностей, необходимых для настройки собственного проекта. Требование состоит в том, что клиент сохраняет в памяти все данные, необходимые для этой конфигурации, и возвращает бэкэнду большой объект, чтобы он мог выполнить несколько операций вставки / удаления. Например: допустим, у нас есть эти модели:

public class Employee
{
    public int Id { get; set; }
    public string FirstName { get; set; }        
    public string LastName { get; set; }
}

public class Contract
{
    public int Id { get; set; }
    public string Descritpion { get; set; }        
    public DateTime ValidityDateStart { get; set; }        
    public DateTime ValidityDateEnd { get; set; }        
}

public class ContractEmployee
{
    public int Id { get; set; }

    public Employee Employee { get; set; }
    public Contract Contract { get; set; }
}

Мы сказали, что клиент манипулирует данными всех сущностей, прежде чем вернуться к бэкэнду, поэтому мне нужна структура данных, которая бы содержала все. Проблема в том, как это сделать. Должен ли я сделать простую коллекцию этих сущностей?

public class Dto
{
    public List<Employee> Employees { get; set; }
    public List<Contract> ContractRegistry { get; set; }
    public List<ContractEmployee> Contracts { get; set; }
}

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

Должен ли я указать в одной строке, какую операцию выполнять? Например, класс сотрудника становится следующим:

public class Employee
{
    public int Id { get; set; }
    public string FirstName { get; set; }        
    public string LastName { get; set; }

    public EnumOperation Operation { get; set; }  // Values: 0=Insert; 1=Modify; 2=Update; 3=Delete
}

Я считаю этот путь ужасным, и я бы не стал его рассматривать ...

Каков наилучший подход к управлению этим делом?

...