5

저는 한동안 EF를 사용해 왔으며, 항상 Model-First 접근 방식을 사용하고 있습니다. 지금 나는 Code-First 땅을 통하여 모험하고있다. 문제는 : 자동 테이블 생성과 관련된 문제가 있습니다.EntityFramework가 테이블을 만들지 않습니다.

일부 사이트에 따르면 가능합니다. 그리고 나는 그들의 성공을 시도하지 않았다. ... Database.CreateIfNotExists()

내 연결 문자열은 완벽하고 작업입니다 :

여기 내가 시도한 것들 중 하나입니다. 수동으로 테이블을 추가하면 작동합니다. 문제는 제가 테이블을 만들지 않았을 때입니다. 내가 말했듯이 그것은 단지 창조하지 않습니다.

수업이 올바르게 장식되었습니다. (다시 : DB를 만들 때 작동합니다)

어떤 제안이 있습니까? 이 기능이 실제로 작동합니까?

내가 사용 :

비주얼 스튜디오 2010 프로페셔널

EntityFramework 4.3.1 R2

SQL 서버 2008 (I도 4.1 시도하지만)

감사합니다 미리.

+0

DbContext에서 파생 된 고유 한 컨텍스트 클래스를 만들었습니까? DbSet을 사용하는 호출 컨텍스트 내의 엔티티 – Sergey

+2

Database.CreateIfNotExists()는 데이터베이스 자체가 존재하지 않는 경우 (데이터베이스와 테이블을 생성하는 경우)에만 테이블을 생성하도록합니다. 데이터베이스가 있지만 테이블이 누락 된 경우 테이블을 자동으로 작성하지 않습니다. 이게 너가 뭘하고있는거야? –

+0

@ Sergey 네, 그랬습니다. – eestein

답변

5

엔터티 프레임 워크에 포함 된 세 개의 데이터베이스 이니셜 라이저가 모두 IDatabaseInitializer<Context> 인터페이스를 구현합니다. 그들은 :

  • CreateDatabaseIfNotExist (기본값)
  • DropCreateDatabaseWhenModelChanges
  • DropCreateDatabaseAlways

기본 API 그냥 테이블을 생성하는 초기화가없는시피, 대신 전체 데이터베이스를 않습니다. 그러나 사람들이 만든 다른 이니셜 라이저가 있습니다. 똑같은 일을하는 것이 있습니다.

그것은 Nuget 패키지 EFCodeFirst.CreateTablesOnly

또 다른 옵션은 그 당신이 정말로해야 할 일이라면 자신의 이니셜을 만드는 것입니다에 있습니다.

+0

당신의 대답에 감사드립니다. 나중에 오늘 밤 나는 그것을 시도해보고 대답을 받아 들여 어떻게되었는지 알려줄 것입니다. 다시 한 번 감사드립니다! – eestein

+0

당신은 환영합니다 :) – Sergey

+0

그 덕분에, 그 남자. – eestein

관련 문제