• 基于EF的数据外键关联查询


    现在很多ORM不自带外键关联的实体查询,比如我查询用户,用时将关联的角色信息查询出来,那么就要进行2次查询,很麻烦。而我现在要做的就是基于EF的外键关联查询。很方便的。

    首先,创建基础查询的BaseService

    public class BaseService<T> where T : BaseEntity
        {
            public virtual int Create(T item)
            {
                using (var db = new DatabaseContext())
                {
                    db.Set<T>().Add(item);
    
                    try
                    {
                        var result = db.SaveChanges();
    
                        return result;
                    }
                    catch (Exception e)
                    {
                        throw e;
                    }
                }
            }
    
            public virtual T GetItem(Expression<Func<T, bool>> filter = null, Func<IQueryable<T>, IOrderedQueryable<T>> orderBy = null, params Expression<Func<T, object>>[] includeProperties)
            {
                using (var db = new DatabaseContext())
                {
                    var query = db.Set<T>().AsExpandable().AsNoTracking();
    
                    if (filter != null) query = query.Where(filter);
    
                    if (includeProperties != null && includeProperties.Length > 0) query = includeProperties.Aggregate(query, (current, includeProperty) => current.Include(includeProperty));
    
                    if (orderBy != null) query = orderBy(query);
    
                    return query.FirstOrDefault();
                }
            }
        }

    BaseEntity见 基于EF创建数据库迁移

    这里只添加了2个方法,一个新增,一个查询单条数据。

    GetItem方法的includeProperties参数就是用于引用关联数据。

    接下来添加RoleService和UserService类。

      public class RoleService : Base.BaseService<Roles>
        {
            public static RoleService Default = new RoleService();
        }
    
      public class UserService : Base.BaseService<Users>
        {
            public static UserService Default = new UserService();
        }

    这2个类都集成BaseService,在没有特殊查询的时候,直接使用BaseService的查询方法。

    接下来添加数据

    var roleId = Guid.NewGuid();
    var result = Service.Service.RoleService.Default.Create(new Roles { Id = roleId, Name = "admin" });
    
    var result = Service.Service.UserService.Default.Create(new Users { Id = Guid.NewGuid(), Name = "admin", RoleId = roleId });

    数据有了,接下来就是查询了 。

    var user = Service.Service.UserService.Default.GetItem(x => x.Name == "admin", null, x => x.Role);

    这些你打开user,发现里面的Role实体也拥有数据。

  • 相关阅读:
    inf的设置【知识】
    输入加速【模板】
    floyed算法【最短路】【模板】
    vector的erase函数使用
    欧拉图
    组合索引
    索引的存储
    索引失效
    装饰器和代理模式
    单例模式
  • 原文地址:https://www.cnblogs.com/xiaoquangege/p/6117373.html
Copyright © 2020-2023  润新知