0
일반 저장소를 사용하면 문제가 없습니다. 저장소에는 2 개의 생성자가 있습니다.항목을 확인하는 방법은 술어와 일치합니다.
private IDbSet<T> mDbSet;
private Expression<Func<T, bool>> mPredicate;
...
public Repository()
{
mDbSet = mDb.Set<T>();
mPredicate = null;
}
public Repository(Expression<Func<T, bool>> predicate)
{
mDbSet = mDb.Set<T>();
mPredicate = predicate;
}
두 번째로 저장소의 항목에 "표준"필터를 제공합니다. 필터는 입력뿐만 아니라 출력에도 적용됩니다. 따라서 Add 함수는 요소가 술어와 일치하는지 확인해야합니다. 그렇게하는 방법. 다음은 컴파일되지 않습니다.
public virtual void Add(ref T item)
{
if (mPredicate != null)
{
List<T> chkList = new List<T>() { item };
if (chkList.FirstOrDefault(mPredicate) == null)
{
throw new AppExcpetion("Add non-matching element.");
}
}
mDbSet.Add(item);
}
FirstOrDefault는 비 일반 정보 목록에 적합합니다. 그러나 아마도 항목이 술어와 일치하는지 확인하기 위해 목록이 필요하지는 않습니다. 어떤 도움을 주셔서 미리 감사드립니다!
'(mPredicate 경우! = null &&! mPredicate (item)) {새로운 AppException 던져 ...}'? –