2012-08-08 3 views
1

데이터베이스를 조회하기 전에 검색 할 때 로컬 추적 엔터티를 사용하는 쿼리를 Entity Framework에서 실행하고 싶습니다. 필자는 저장소/데이터베이스를 채우는 복잡한 루틴을 작성했습니다. 이제 Entity Framework를 사용할 때 이미 추가되었지만 아직 저장되지 않은 엔터티는 사용하지 않습니다. 따라서이 코드 스 니펫은 n을 추가하는 대신 데이터베이스에 하나의 범주 만 추가해야합니다.Entity Framework 기본적으로 로컬 쿼리

using (Db Db = new Db()) { 
    for (int i = 0; i < 10; i++) { 
     Category Category = Db.Categories.SingleOrDefault(x => x.Name == "Hello"); 
     if (Category == null) { 
      Category = Db.Categories.Create(); 
      Category.Name = "Hello"; 
      Db.Categories.Add(Category); 
      Console.WriteLine("Adding item..."); 
     } 
    } 
} 

어떻게하면됩니까? 필자는 로컬 콜렉션을 먼저 사용하려고 시도한 IQueryable에서 공급자를 변경할 수있는 추상화 방법을 사용합니다. 나는 성공하지 못했다. 도와주세요.

using (Db Db = new Db()) { 
    var newCategories = new List<Category>(); 
    for (int i = 0; i < 10; i++) { 
     Category category = newCategories.SingleOrDefault(x => x.Name == "Hello"); 
     if (category == null) { 
      category = Db.Categories.SingleOrDefault(x => x.Name == "Hello"); 
      if (category == null) { 
       category = Db.Categories.Create(); 
       category.Name = "Hello"; 
       Db.Categories.Add(category); 
       newCategories.Add(category); 
       Console.WriteLine("Adding item..."); 
      } 
     } 
    } 
} 

자신에 IQueryable 공급자가 매우 복잡 작업입니다 쓰기 : 그것은 당신이 찾고 무엇을하지 않을 수 있지만

+1

호기심입니다. 아직 저장되지 않은 엔티티를 어떻게 쿼리 할 계획입니까? 데이터베이스 생성 ID는 아직 생성되지 않았기 때문에 0이됩니다. 따라서 정체성은 없습니다. 틀림없이 다른 것들을 쿼리 할 수는 있지만 hackish와 poor practice로만 보인다. 왜 그냥 항목의 자신의 컬렉션을 유지하고 그것에 대해 개체에 linq를 사용하지? –

답변

1

이는 방법을 읽기 위해 정말 간단하고 쉽습니다.

편집 : 내가 시도한 것이 작동하지 않는 이유에 대해 더 자세히 들어간 this post을 발견했습니다.

생각 나는 당신의 특별한 상황이 무엇인지 모르겠다. 데이터 저장소에 문의하기 전에 컬렉션에서 중복을 제거해야한다. 위의 해결 방법은 동시에이 작업을 수행합니다.

희망이 도움이됩니다.