2
public interface IRepository<T>// : IDisposable
where T : IEntity
{
IQueryable<T> GetAll();
void Save(T entity);
void Delete(int id);
void Delete(T entity);
}
public abstract class RepositoryBase<T, TDb> : IRepository<T>
where T : IEntity
where TDb : class, IDbEntity, new()
{
protected abstract Table<TDb> GetTable();
public void Delete(int id)
{
TDb dbEntity = GetDbEntity(id);
if (dbEntity == null)
{
throw new MyException(...);
}
GetTable().DeleteOnSubmit(dbEntity);
Context.SubmitChanges();
}
// and other methods...
}
現在需要實現通過表達式刪除實體的方法。我想在IRepository下面的方法:存儲庫模式:如何實現DeleteWhere接受業務實體的表達式
void DeleteWhere(Expression<Func<IEntity, bool>> exprFoeBusinessEntity);
這裏的問題是,實施應該是這樣的:
void DeleteWhere(Expression<Func<IEntity, bool>> exprFoeBusinessEntity);
{
Expression<Func<IDbEntity, bool>> exprFoeDbEntity
= exprWhere=> ... // How to convert exprFoeBusinessEntity into exprFoeDbEntity
GetTable().DeleteAllOnSubmit(GetTable().Where(exprForDbEntity)));
}
我不知道該如何表達對轉換業務實體成表達式的實體...
我可以很容易地改變方法來接受與db實體的表達,但我希望我的存儲庫隱藏DBEntities裏面。
請指教。任何想法都歡迎。
P.S.我與.NET 3.5的工作(但4.0的解決方案也是可以接受的),ORM - LINQ2SQL