Общий класс доступа к данным с различными базами данных - PullRequest
1 голос
/ 13 октября 2019

У меня есть приложение, в котором я могу выбрать базу данных с помощью комбинированного списка, а затем применить несколько запросов к этой базе данных в приложении. Для этого я сгенерировал 6 разных .edmx файлов, которые генерируются из моих баз данных с использованием подхода «база данных в первую очередь». Кроме того, я хочу создать класс Data Access Layer , в котором я управляю своими операциями доступа к данным, но я хочу, чтобы этот класс был универсальным, чтобы мне не нужно было создавать 6 различных классов доступа к данным. для каждой сущности. Для этого я создал такой класс:

public class UserDetails<TEntity> where TEntity:class
    {
        private DbContext _context { get; set; }
        private DbSet<TEntity> efDB { get; set; }

        public UserDetails(DbContext context)
        {
            _context = context;
            efDB = _context.Set<TEntity>();
        }
        public List<UserDetailsModel> GetUserDetails(int? roleID, int? titleID, int? managerID, string id = "", string name = "", string surname = "", string mail = "")
        {
            using (efDB) {

                List<UserDetailsModel> query = (from user in efDB.TABLE_USER
                                                join pass in efDB.TABLE_PASSWORD_HISTORY on GetLatestPassword(user.ID) equals pass.ID into passJoined
                                                from passLatest in passJoined.DefaultIfEmpty()
                                                join role in efDB.TABLE_REL_USER_ROLE on user.ID equals role.UserID into roleJoined
                                                from roleRel in roleJoined.DefaultIfEmpty()
                                                join defRole in efDB.TABLE_DEF_ROLE on roleRel.RoleID equals defRole.ID into defRoleJoined
                                                from defRoleRel in defRoleJoined.DefaultIfEmpty()
                                                join title in efDB.TABLE_USER_TITLES on user.TitleID equals title.ID
                                                where user.Name.Contains(name) && user.Surname.Contains(surname) && user.Email.Contains(mail)
                                                select new UserDetailsModel() {
                                                                                ID = user.ID,
                                                                                Name = user.Name,
                                                                                Surname = user.Surname,
                                                                                Email = user.Email,
                                                                                TitleID = (int)user.TitleID,
                                                                                TitleName = title.Description,
                                                                                Password = passLatest.Password,
                                                                                RoleID = roleRel.RoleID,
                                                                                RoleName = defRoleRel.RoleName,
                                                                              }
                                               ).ToList();

                return query;
            }

Как видите, я хочу выполнить запрос linq в моем методе GetUserDetails. Обратите внимание, что все 6 баз данных имеют одинаковые таблицы с одинаковыми именами, поэтому этот запрос будет работать для всех моих сущностей. Что я хочу сделать здесь, так это использовать переменную efDB в общем, чтобы она могла быть любой из 6 баз данных. Нужный экземпляр объекта базы данных будет создан другим классом, который работает как фабрика и будет передан моему UserDetails классу доступа к данным. Но, очевидно, мой код не будет работать. Как я могу реализовать эту общую логику в моей системе? Заранее спасибо.

1 Ответ

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