美文网首页dotNET
泛型仓储模式的实现

泛型仓储模式的实现

作者: czly | 来源:发表于2017-02-22 11:08 被阅读0次

    在用EF时,我们可以用仓储模式解耦领域层与数据逻辑层。
    下面我们实现简单的仓储模式。
    首先抽象仓储的接口
    <pre>
    public interface IRepository<TEntity> where TEntity : class
    {
    DbSet<TEntity> Entities { get; }
    //增加单个实体
    int Insert(TEntity entity);
    //增加多个实体
    int Insert(IEnumerable<TEntity> entities);
    //更新实体
    int Update(TEntity entity);
    //删除
    int Delete(object id);
    //根据主键获取实体
    TEntity GetByKey(object key);

    }
    

    </pre>
    下面新增一个类,继承IRepository接口
    <pre>
    public class AIS20160512185159Repository<TEntity> : IRepository<TEntity> where TEntity : class
    {
    AIS20160512185159Entities _entitys = EFInstance.AIS2016Entities;//单例返回唯一EF数据库对象
    public System.Data.Entity.DbSet<TEntity> Entities
    {
    get
    {
    return _entitys.Set<TEntity>();
    }
    }

        public int Insert(TEntity entity)
        {
            Entities.Add(entity) ;
            return _entitys.SaveChanges();
        }
    
        public int Insert(IEnumerable<TEntity> entities)
        { 
            Entities.AddRange(entities);
            return _entitys.SaveChanges();
        }
    
        public int Update(TEntity entity)
        {
            _entitys.Entry<TEntity>(entity).State = EntityState.Modified;
            return _entitys.SaveChanges();
        }
    
        public int Delete(object id)
        {
            return 0;
        }
    
        public TEntity GetByKey(object key)
        {
           
            return Entities.Find(key);
        }
    }
    

    </pre>

    调用

    <pre>
    IRepository<WorkRecord> workRecord = new AIS20160512185159Repository<WorkRecord>();
    IRepository<WorkRecordSN> workRecordsn = new AIS20160512185159Repository<WorkRecordSN>();

            var workRecordList = (from item in workRecord.Entities
                                  join items in workRecordsn.Entities on item.FID
                                  equals items.FID
                                  
                                  select new {A=item.FID,B=item.FICMONo,C=item.FSerialNo,D=items.FSN }).ToList();
            dataGridView1.DataSource = workRecordList;
    

    </pre>

    调用时,因为要引用实体对象,因ef的实体对象默认与DBContext生成在一个项目中,这样引用实体对象的话,就可以直接用DBContext,所以,我们需要将实体与DBContext分离,这可以参考我的EF tt模板将实体与DBContext分离

    相关文章

      网友评论

        本文标题:泛型仓储模式的实现

        本文链接:https://www.haomeiwen.com/subject/ifgpwttx.html