zoukankan      html  css  js  c++  java
  • 基于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实体也拥有数据。

  • 相关阅读:
    初探WebService
    【前端】CSS3实现弹出效果
    html转pdf、html页面保存为word文件、将页面上的table表格导出为excel
    DES64位加密解密
    xml文件数据上报——根据模型生成对应的xml文件进行上报
    数据上报-动态生成winform表单
    图片轮播 及通知公告上滚动 (无空隙滚动)
    jQuery 全选与不全选 Jquery each
    webform快速创建表单内容文件--oracle 数据库
    Ajax 通过post提交数据到一般处理程序,后台快速获取数据的方法
  • 原文地址:https://www.cnblogs.com/xiaoquangege/p/6117373.html
Copyright © 2011-2022 走看看