【问题标题】:Generic data access class with different databases具有不同数据库的通用数据访问类
【发布时间】:2019-10-13 08:55:03
【问题描述】:

我有一个应用程序,我可以在组合框的帮助下选择一个数据库,然后在应用程序中对该数据库应用几个查询操作。为此,我生成了 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;
            }

如您所见,我想在 GetUserDetails 方法中执行 linq 查询。请注意,所有 6 个数据库都有相同名称的相同表,因此此查询将适用于我的所有实体。我想在这里做的是,使用变量efDBgenericly 以便它可以是 6 个数据库实体中的任何一个。所需的数据库实体实例将由一个像工厂一样工作的不同类创建,并将提供给我的UserDetails 数据访问类。但显然,我的代码不起作用。我怎样才能在我的系统中实现这个通用逻辑?提前致谢。

【问题讨论】:

  • But obvisiouly, my code won't work: 为什么它不起作用?你得到什么错误?

标签: c# asp.net-mvc entity-framework


【解决方案1】:
猜你喜欢
  • 2010-09-23
  • 1970-01-01
  • 2013-05-10
  • 1970-01-01
  • 1970-01-01
  • 2013-01-08
  • 2014-03-20
  • 1970-01-01
  • 2015-09-09
相关资源
最近更新 更多