美文网首页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分离

相关文章

  • 泛型仓储模式的实现

    在用EF时,我们可以用仓储模式解耦领域层与数据逻辑层。下面我们实现简单的仓储模式。首先抽象仓储的接口 public...

  • 关于仓储层的理解+摘抄

    在MVC中使用泛型仓储模式和工作单元来进行增删查改 仓储模式是为了在程序的数据访问层和业务逻辑层之间创建一个抽象层...

  • 008-自定义泛型,Collections

    自定义泛型 泛型类 代码实现 测试 泛型接口 代码实现 泛型方法 代码演示 测试 泛型上下边界 Collectio...

  • 泛型相关总结

    泛型在设计模式和源码分析中有重要的写法支持,学习设计模式和源码分析必须掌握泛型的使用原理 泛型 概述 什么是泛型?...

  • Swift项目开发实用篇:自定义DEBUG下的LOG

    Swift项目中我们怎么自定义LOG.在DEBUG模式下打印RELEASE模式下不打印?我们通过泛型函数实现(泛型...

  • 泛型

    泛型 Why:为什么需要泛型 What:泛型是什么; How:泛型怎么实现 When:泛型什么时候使用 Where...

  • Java 19-5.1泛型

    泛型类定义泛型类可以规定传入对象 泛型类 和泛型方法 泛型接口 如果实现类也无法确定泛型 可以在继承类中确定泛型:

  • Android基础难点-泛型

    泛型上下限的读写模式是什么(或者泛型的PECS模式) PECS指的是Producer Extends, Consu...

  • Java-泛型

    关键字:泛型、类型擦除、泛型实现、泛型缺点、泛型运用。 1.不使用泛型会怎么样? 例子1,int、String元素...

  • Kotlin-泛型和委托

    泛型 泛型的使用是为了程序有更好的扩展性。泛型类和泛型方法 泛型的高级特性java的泛型是通过类型擦除机制来实现的...

网友评论

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

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