Odata后台逻辑层代码

  private UserContext db = new UserContext(); //定义一个上下文
        //查询
        [EnableQuery] //属性,使前台修改,查询,过滤,排序.....
        public IQueryable<User> Get() //返回一个集合,不需要从前台带任何参数
        {
            return db.Users; //返回Users集合
        }
        //用Id查询
        [EnableQuery] //属性,使前台修改,查询,过滤,排序.....
        public SingleResult<User> Get([FromODataUri] int key) //返回一个集合,从前台带一个Id,SingleResult<>表示包含零个或一个实体的IQueryable<>集合
        {
            IQueryable<User> result = db.Users.Where(p => p.Id == key); //根据前台Id查询集合
            return SingleResult.Create(result); //从IQueryable<T>创建SingleResult<T>,无需显示指定类型T即可实例化
        }
        //增
        public async Task<IHttpActionResult> Post(User User) //定义一个异步的方法,从前台传过来一个对象,IHttpActionResult是定义一个用于异步方法创建的命令
        {
            if (!ModelState.IsValid) //判断,非模型状态,有效
            {
                return BadRequest(ModelState); //恶意请求,返回模型
            }
            db.Users.Add(User); //添加对象
            await db.SaveChangesAsync(); //提交
            return Created(User);  //创建一个指示控件
        }
        //修改
        public async Task<IHttpActionResult> Patch([FromODataUri] int key, Delta<User> product) //Delta<>() 初始化新实例
        {
            if (!ModelState.IsValid) //非有效模型
            {
                return BadRequest(ModelState); //恶意请求,返回模型
            }
            var entity = await db.Users.FindAsync(key); //发送请求,异步查询主键是否存在
            if (entity == null) //如果不存在
            {
                return NotFound(); //返回未找到
            }
            product.Patch(entity); //修改实体
            try
            {
                await db.SaveChangesAsync(); //提交
            }
            catch (DbUpdateConcurrencyException) //提交的数据与数据库里的数据不符 
            {
                if (!ProductExists(key)) //再次判断数据库里是否存在id
                {
                    return NotFound(); //返回未找到
                }
                else
                {
                    throw; //抛出
                }
            }
            return Updated(entity); //返回更新的实体类
        }
        //修改
        public async Task<IHttpActionResult> Put([FromODataUri] int key, User update) //定义一个异步方法.这个方法从前台传过一个int类型的id.一个对象
        {
            if (!ModelState.IsValid) //如果非模型状态,有效
            {
                return BadRequest(ModelState); //恶意请求,返回模型状态
            }
            if (key != update.Id) //判断前台id非等于数据库里对象的id
            {
                return BadRequest(); //返回失败
            }
            db.Entry(update).State = EntityState.Modified; //修改实体模型
            try
            {
                await db.SaveChangesAsync(); //提交
            }
            catch (DbUpdateConcurrencyException) //提交的数据与数据库的不符 ,DbUpdateConcurrencyException表示以上错误将被该异常捕获
            {
                if (!ProductExists(key)) //再次判断数据库里是否有id
                {
                    return NotFound(); //返回未找到
                }
                else
                {
                    throw; //抛出
                }
            }
            return Updated(update); //更新实体
        }
        private bool ProductExists(int key) //定义一个方法,从修改方法里的key传到这个方法里
        {
            return db.Users.Any(r => r.Id == key); //是否包含key
        }
        //删除
        public async Task<IHttpActionResult> Delete([FromODataUri] int key) //定义一个异步的方法,从前台传过来一个id
        {
            var product = await db.Users.FindAsync(key); //这句话的意思是查询Id异步的(key) ,await等待异步完成,Async异步,FindAsync异步查询
            if (product == null) //判断是否为null,是
            {
                return NotFound(); //返回不存在
            }
            db.Users.Remove(product); //否则查询出来后删除这个实体.
            await db.SaveChangesAsync(); //提交
            return StatusCode(HttpStatusCode.NoContent); //返回一个Http成功请求
        }
        //连接到视图
        [ODataRoute("User({id})")] //自定义路由,ODataRoute()里面写控制器名
        [HttpGet]
        public IHttpActionResult GetList([FromODataUri] int id) //定义一个方法,需要一个Id
        {
            var ue = db.Users.Where(r => r.Id == id).Select(x => new View_list //定义一个新的模型视图
            {
                Id = x.Id, //模型里的Id等于User的Id
                Name = x.Name, //Name等于User的Name
                Pwd = x.PassWord, //Pwd等于User的PassWord
                Sex = x.Sex, //Sex等于User的Sex
                Birthday = x.Birthday, //Birthday等于User的Birthday
                Mz = x.Nation.NationName //Mz等于Naton表里的NationName
            });
            return Ok<IEnumerable<View_list>>(ue);//返回一个集合
        }

View_list类

        public int Id { get; set; }
        public string Name { get; set; }
        public string Pwd { get; set; }
        public string Sex { get; set; }
        public DateTime Birthday { get; set; }
        public string Mz { get; set; }

WebApiConfig.cs路由配置

 config.Count().Select().OrderBy().Filter().Expand().MaxTop(null);
            ODataModelBuilder builder = new ODataConventionModelBuilder();
            var UserIe = builder.EntitySet<User>("User");
            UserIe.EntityType.Collection.Function("GetList").Returns<View_list>(); //一个方法,表明这个方法指向View_list;
            builder.EntitySet<Nation>("Nation");
            config.MapODataServiceRoute(
                routeName: "odata",
                routePrefix: "odata",
                model: builder.GetEdmModel()
                );

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值