MVC——就酱紫一个系列,这是一个好的开始4

 

 

我们继续

我们 在core 里面 新建一个Sevice文件夹

这个文件夹 我们用来存放 一下 方法类接口

新建一个基类接口 ICrudService

using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Text;
using System.Threading.Tasks;
using Model;
using MongoDB.Driver;

namespace Core.Service
{
    public interface ICrudService<T> where T : Entity, new()
    {
        long Add(T e);
        void Add(IEnumerable<T> items);
        void Update(T item);
        void Delete(long id);
        void DeleteAll();
        long Count();
        T Single(long id);
        IEnumerable<T> GetAll();
        IEnumerable<T> Where(Expression<Func<T, bool>> func);
        IEnumerable<T> Where(IMongoQuery query);
        IEnumerable<T> GetPageList(IMongoQuery query, IMongoFields f, IMongoSortBy s, int curPage, int pageNum);
        IEnumerable<T> GetPageList(IMongoQuery query, IMongoFields f, IMongoSortBy s, int curPage, int pageNum, int lastMaxId);
    }
}

以后每个实体的操作都继承上面的基类接口

 : ICrudService<Favorites>

 

在里面添加一个方法

/// <summary>
        /// 通过主键ID得到实体
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        Classification GetClassification(long id);

 

基本的 增删查改 就有

接着 新建一个类库Service 这里要去实现上面的接口

这个类库也要引用MongoDB的dll 还是 

打开程序包管理器控制台 

不要忘记更改默认项目

PM> Install-package mongocsharpdriver

等待一会
已安装“mongocsharpdriver 1.8.3”。
已成功将“mongocsharpdriver 1.8.3”添加到 Service。

PM>

首先先实现 上面的 基类

using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Text;
using System.Threading.Tasks;
using Core.Repository;
using Core.Service;
using Model;
using MongoDB.Driver;
using MongoDB.Driver.Builders;

namespace Service
{
    public class CrudService<T> : ICrudService<T> where T : Entity, new()
    {
        protected IRepo<T> mongoRepo;

        public CrudService()
        {
            this.mongoRepo = new Data.MongoDB.MongoRepo<T>();
        }

        public CrudService(IRepo<T> mongoRepo)
        {
            this.mongoRepo = mongoRepo;
        }


        #region MongoDB操作

        public virtual long Add(T e)
        {
            var a = mongoRepo.Add(e);

            return a.ID;
        }

        public virtual void Add(IEnumerable<T> items)
        {
            foreach (T item in items)
            {
                Add(item);
            }
        }

        public virtual void Update(T item)
        {
            mongoRepo.Update(item);
        }

        public virtual void Delete(long id)
        {
            mongoRepo.Delete(mongoRepo.Single(id));
        }

        public virtual void DeleteAll()
        {
            mongoRepo.DeleteAll();
        }

        public virtual long Count()
        {
            return mongoRepo.Count();
        }

        public virtual T Single(long id)
        {
            return mongoRepo.Single(id);
        }

        public virtual IEnumerable<T> GetAll()
        {
            return mongoRepo.All();
        }

        public virtual IEnumerable<T> Where(Expression<Func<T, bool>> predicate)
        {
            return mongoRepo.Where(predicate);
        }

        public virtual IEnumerable<T> Where(IMongoQuery query)
        {
            return mongoRepo.Find(query);
        }

        /// <summary>
        /// 分页,通过Skip调过前几页的数据
        /// </summary>
        /// <param name="query">查询条件</param>
        /// <param name="f">显示字段</param>
        /// <param name="s">排序字段</param>
        /// <param name="curPage">当前页</param>
        /// <param name="pageNum">每页数据条数</param>
        /// <returns></returns>
        public IEnumerable<T> GetPageList(IMongoQuery query, IMongoFields f, IMongoSortBy s, int curPage, int pageNum)
        {
            return mongoRepo.Find(query).SetFields(f).SetSortOrder(s).SetSkip((curPage - 1) * pageNum).SetLimit(pageNum);
        }


        /// <summary>
        /// 分页,通过LastMaxId取数
        /// </summary>
        /// <param name="query">查询条件</param>
        /// <param name="f">显示字段</param>
        /// <param name="s">排序字段</param>
        /// <param name="curPage">当前页</param>
        /// <param name="pageNum">每页数据条数</param>
        /// <returns></returns>
        public IEnumerable<T> GetPageList(IMongoQuery query, IMongoFields f, IMongoSortBy s, int curPage, int pageNum, int lastMaxId)
        {
            return mongoRepo.Find(Query.And(Query.GT("_id", lastMaxId), query)).SetFields(f).SetSortOrder(s).SetLimit(pageNum);
        }


        #endregion
    }
}

 

 

这里同上面的接口 一样 去继承就ok

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Core.Repository;
using Core.Service;
using Model;

namespace Service
{
    public class ClassificationService : CrudService<Classification>, IClassificationService
    {
        public ClassificationService()
            : base()
        {
        }

        public ClassificationService(IRepo<Classification> mongoRepo)
            : base(mongoRepo)
        {
        }

        /// <summary>
        /// 通过主键ID得到实体
        /// </summary>
        /// <param name="userid"></param>
        /// <returns></returns>
        public Classification GetClassification(long id)
        {
            return mongoRepo.Single(id);
        }
    }
}

 

 

posted @ 2013-11-30 00:56  风飞萧雪  阅读(176)  评论(0)    收藏  举报