泛型倉(cāng)儲(chǔ)模式的實(shí)現(xiàn)

在用EF時(shí),我們可以用倉(cāng)儲(chǔ)模式解耦領(lǐng)域?qū)优c數(shù)據(jù)邏輯層。
下面我們實(shí)現(xiàn)簡(jiǎn)單的倉(cāng)儲(chǔ)模式。
首先抽象倉(cāng)儲(chǔ)的接口
<pre>
public interface IRepository<TEntity> where TEntity : class
{
DbSet<TEntity> Entities { get; }
//增加單個(gè)實(shí)體
int Insert(TEntity entity);
//增加多個(gè)實(shí)體
int Insert(IEnumerable<TEntity> entities);
//更新實(shí)體
int Update(TEntity entity);
//刪除
int Delete(object id);
//根據(jù)主鍵獲取實(shí)體
TEntity GetByKey(object key);

}

</pre>
下面新增一個(gè)類,繼承IRepository接口
<pre>
public class AIS20160512185159Repository<TEntity> : IRepository<TEntity> where TEntity : class
{
AIS20160512185159Entities _entitys = EFInstance.AIS2016Entities;//單例返回唯一EF數(shù)據(jù)庫(kù)對(duì)象
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>

調(diào)用

<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>

調(diào)用時(shí),因?yàn)橐脤?shí)體對(duì)象,因ef的實(shí)體對(duì)象默認(rèn)與DBContext生成在一個(gè)項(xiàng)目中,這樣引用實(shí)體對(duì)象的話,就可以直接用DBContext,所以,我們需要將實(shí)體與DBContext分離,這可以參考我的EF tt模板將實(shí)體與DBContext分離

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容