2017-12-17 2 views
0

시스템을 실행하면서. 사용자가 방문 할 때마다 : http://localhost:54619/People/Index 나는 모든 날짜를 데이터베이스에서 삭제하고 새 데이터를 추가하고자합니다.C에서 MVC5의 System.Data.Entity에서 모든 행을 삭제합니다.

그러나 나는 그것을 해결할 방법을 찾을 수 없습니다.

레코드가 Json 파일에서 읽히고 데이터베이스에 추가됩니다.

// GET: People 
    public ActionResult Index() 
    { 
     if (db.People.Count() > 0) 
     { 
      int NumRows = db.People.Count(); 
      for (int i = 0; i < NumRows; i++) 
      { 
       Person person = db.People.Find(i+1); 
       db.People.Remove(person); 
       db.SaveChanges(); 
      } 
      string Json = System.IO.File.ReadAllText(@"C:\Users\Alex\Desktop\Output.json"); 
      JavaScriptSerializer ser = new JavaScriptSerializer(); 
      var personlist = ser.Deserialize<List<Person>>(Json); 
      db.People.AddRange(personlist); 
      db.SaveChanges(); 
      //return RedirectToAction("Index"); 
      return View(db.People.ToList()); 
     } 
     else 
     { 
      string Json = System.IO.File.ReadAllText(@"C:\Users\Alex\Desktop\Output.json"); 
      JavaScriptSerializer ser = new JavaScriptSerializer(); 
      var personlist = ser.Deserialize<List<Person>>(Json); 
      db.People.AddRange(personlist); 
      db.SaveChanges(); 
      return View(db.People.ToList()); 
     } 

    } 
+0

db.People.Find (...)는 기본 키를 검색합니다. –

+0

매번 데이터베이스를 대체하기 위해 파일을 읽는다면 왜 데이터베이스를 사용하지 않아도됩니까? 그냥 파일 내용을 제공하십시오 ... "파일에서 읽음"이 "다른 방식으로 데이터베이스 새로 고치기"에서 자리 표시 자일 수 있음을 알지만, 콜렉션에 대한 요청을 얻으려면 아직 독자적으로 보이지는 않습니다. 컬렉션을 데이터베이스에 저장합니다. –

+0

루프 내에서 SaveChanges()를 수행하지 마십시오. 성능면에서 과도합니다. 대신 모든 삭제 작업을 만들고 루프 외부에서 SaveChanges를 호출하십시오. – Oscar

답변

1
db.People.RemoveRange(db.People.ToList()); 
db.SaveChanges(): 
0

마커스의 대답은 작동합니다. 하지만 엄청나게 비효율적입니다. 해당 역할을 삭제하기 전에 데이터베이스에서 모든 행을로드합니다. 행이 많으면 데이터베이스에서 쿼리하고 데이터베이스 클라이언트로 데이터를 보내는 데 시간이 걸립니다.

이러한 유형의 작업에는 db.Database.ExecuteSqlCommand()을 사용하여 데이터베이스에 대해 쿼리를 실행하면됩니다. LINQ는 훌륭하지만 모든 것이 아닙니다.

db.Database.ExecuteSqlCommand("DELETE FROM People"); 
+1

사실, Markus의 코드는 DB에 독립적이지만, 대/소문자가 포함 된 테이블/열 이름을 이스케이프해야하는 경우처럼 Postgres에서 작동하지 않습니다. – ckuri

관련 문제