在用EF時,我們可以用倉儲模式解耦領(lǐng)域?qū)优c數(shù)據(jù)邏輯層遍希。
下面我們實現(xiàn)簡單的倉儲模式授霸。
首先抽象倉儲的接口
<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);
//根據(jù)主鍵獲取實體
TEntity GetByKey(object key);
}
</pre>
下面新增一個類锁摔,繼承IRepository接口
<pre>
public class AIS20160512185159Repository<TEntity> : IRepository<TEntity> where TEntity : class
{
AIS20160512185159Entities _entitys = EFInstance.AIS2016Entities;//單例返回唯一EF數(shù)據(jù)庫對象
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)用時廓旬,因為要引用實體對象,因ef的實體對象默認(rèn)與DBContext生成在一個項目中谐腰,這樣引用實體對象的話孕豹,就可以直接用DBContext,所以十气,我們需要將實體與DBContext分離励背,這可以參考我的EF tt模板將實體與DBContext分離