2012-08-10 2 views
0

나는 일반 EF 방법에 대해 생각하기 시작했습니다, 그리고 내가 게시 것으로 나타났습니다 http://blog.damianbrady.com.au/2012/03/07/a-generic-crud-repository-for-entity-framework/일반 엔티티 프레임 워크와 된 IQueryable <T>

코드 조각 : 지금

protected Dictionary<string, object> CachedObjects = new Dictionary<string, object>(); 

protected ObjectSet<TEntity> GetObjectSet<TEntity>() where TEntity : EntityObject 
{ 
    var fulltypename = typeof(TEntity).AssemblyQualifiedName; 
    if (fulltypename == null) 
     throw new ArgumentException("Invalid Type passed to GetObjectSet!"); 
    if (!CachedObjects.ContainsKey(fulltypename)) 
    { 
     var objectset = base.CreateObjectSet<TEntity>(); 
     CachedObjects.Add(fulltypename, objectset); 
    } 
      return CachedObjects[fulltypename] as ObjectSet<TEntity>; 
} 

... 

public TEntity GetFirstOrDefault<TEntity>(Func<TEntity, bool> predicate) where TEntity : EntityObject 
{ 
    return GetObjectSet<TEntity>().FirstOrDefault(predicate); 
} 

하고, 그 두 줄 경우 코드가 동일합니까?

adapter.db.GetFirstOrDefault<MyTable>(x => x.ID == 1); 
adapter.db.MyTable.FirstOrDefault(x => x.ID == 1); 

나는 모든 항목을 메모리에로드하고 일부 필터링을 수행하지 않으므로 묻습니다. 해당 일반 작업을 IQueryable<T>과 같이 만들 수있는 방법이 있습니까?

+0

무엇이'adapter.db'입니까? 'adapter.db.MyTable'은 무엇입니까? –

답변

1

모든 항목을 메모리에 넣고 싶지 않아서 묻는군요. 그런 다음 필터링을 수행하십시오. 거기에 어떤 접근 방식이 그 같은일반 작업 IQueryable 같은가요?

Expression<Func<TEntity, bool>> 대신 Func<TEntity, bool>을 사용하기 때문에 모든 항목이로드되고 메모리에서 필터링됩니다. 또한 그것은 세트를 chaching하기 위해 쓸모없는 인프라를 사용합니다. 개체 집합을 얻으려면 objectContext.CreateObjectSet<TEntity>을 사용해야합니다.

관련 문제