2011-08-18 4 views
2

EF를 사용하여 SQL 레코드 추가/업데이트에 대한 지침이 필요합니다. EF4 데이터베이스에 하드 디스크의 파일에 대한 정보를 저장하는 응용 프로그램을 작성한다고 가정 해 보겠습니다. 버튼을 누르면 지정된 경로의 파일 (전체 드라이브 일 수도 있음)을 검색하고 파일 크기, 날짜 등의 정보를 데이터베이스에 저장합니다. 파일이 이전 실행에서 이미 기록 된 경우도 있지만, 그래서 그것의 속성은 업데이트되어야한다; 때로는 파일 묶음이 처음 발견되어 추가 될 필요가 있습니다.추가 항목이 이미 존재하거나 존재하지 않을 경우 EF 엔티티를 추가/업데이트하는 최적의 방법

저는 EF4를 사용하고 있으며 새로운 파일 정보를 추가하고 기존 레코드를 업데이트하는 가장 효율적인 방법을 찾고 있습니다. 내가 이해할 수있는 바와 같이 검색 버튼을 누르면 파일이 감지되고 파일 엔티티의 존재 여부를 확인하고 ID 필드를 검색 한 다음 관련 정보를 추가하거나 업데이트해야합니다. 이미 존재하지 않는다면, 그 폴더와 관련된 객체 (예 : 폴더 경로)를 나타내는 트리를 만들어 추가해야 할 것입니다. 또한 폴더 경로 객체의 병합도 처리해야합니다.

수백만 개의 파일이있는 경우 서버에있을 수 있으므로 전체 데이터베이스를 컨텍스트에로드하는 것이 바람직하지 않거나 실용적이지 않습니다. 따라서 모든 파일에 대해 디스크의 데이터베이스를 왕복 여행하여 항목이 이미 있는지 검색하고 ID가 있으면 검색 한 다음 업데이트 할 다른 여행을 검색해야 할 수도 있습니다. 한 번에 DB에 여러 파일 객체 트리를 삽입/업데이트 할 수있는보다 효율적인 방법이 있습니까? Entity 컨텍스트 메소드 (예 : Insert If It Doesnt Exend and Update If It Does ')가있는 경우, 트랜잭션에서 여러 줄로 마무리 할 수 ​​있습니까?

이것이 매우 일반적인 요구 사항 일 것이라고 생각합니다. EF에서 가장 좋은 방법은 무엇입니까? 모든 생각을 주시면 감사하겠습니다. (오, 내 DB는 차이가 있다면 SQLite입니다)

답변

1

DB에 레코드가 이미 있는지 확인할 수 있습니다. 그렇지 않으면 레코드를 만들고 추가하십시오. 그런 다음 아래 샘플 코드와 같이 삽입 및 업데이트에 공통적 인 레코드 필드를 설정할 수 있습니다.

  var strategy_property_in_db = _dbContext.ParameterValues().Where(r => r.Name == strategy_property.Name).FirstOrDefault(); 
      if (strategy_property_in_db == null) 
      { 
       strategy_property_in_db = new ParameterValue() { Name = strategy_property.Name }; 
       _dbContext.AddObject("ParameterValues", strategy_property_in_db); 
      } 
      strategy_property_in_db.Value = strategy_property.Value; 
관련 문제