context.Database.Initialize(true)
는 예외가 발생하지 않습니다.
예를 들어 데이터베이스에 테이블이 더 이상 존재하지 않는 엔티티에 액세스하려고 시도하기 전에 현재 데이터베이스와 스키마가 일치하는지 확인하는 방법이 있습니까? 예외가 EF에서 발생합니까?
context.Database.Initialize(true)
는 예외가 발생하지 않습니다.
예를 들어 데이터베이스에 테이블이 더 이상 존재하지 않는 엔티티에 액세스하려고 시도하기 전에 현재 데이터베이스와 스키마가 일치하는지 확인하는 방법이 있습니까? 예외가 EF에서 발생합니까?
데이터베이스가 모델과 일치하는지 확인하려면 CompatibleWithModel을 호출 할 수 있습니다. 이 매개 변수를 true로 설정하면 모델 데이터가 데이터베이스에서 발견되지 않으면 예외가 발생합니다. [@reckface]를 통해 지금 https://github.com/reckface/EntityFramework.Verify이
bool isCompatible = context.Database.CompatibleWithModel(true);
EF는 응용 프로그램을 시작할 때마다 데이터베이스 스키마와 모델을 교차 확인하지 않습니다. 대신 데이터베이스에 저장된 모델 (__MigrationsHistory 테이블과 EdmMetadata 앞에 있음)을 찾고이 저장된 모델을 사용중인 모델과 비교합니다. 모델이 일치하면 데이터베이스가 사용됩니다. 모델이 일치하지 않으면 예외가 발생합니다. 데이터베이스에 __MigrationHistory 또는 EdmMetadata 테이블이없는 경우 EF는 DbContext를 사용하여 데이터베이스의 첫 번째 접근 방식을 사용 중이며 데이터베이스가 모델과 일치한다고 가정합니다. 모델과 데이터베이스를 비교하려면 EdmxWriter.WriteEdmx를 사용하여 모델에 대해 Edmx를 덤프하고 Visual Studio 및 EF 디자이너를 사용하여 데이터베이스에서 Edmx를 가져 와서 SSDL 부분을 비교하십시오.
"EF는 DbContext로 데이터베이스 첫 번째 접근 방식을 사용 중이며 데이터베이스가 모델과 일치한다고 가정합니다. " 그래서 응용 프로그램을 시작할 때마다 모든 테이블과 모든 열이 데이터베이스에 있는지 확인해야합니다. –
모델과 데이터베이스를 변경하지 않고 이전과 일치하는 경우이 작업을 수행 할 필요가 없을 것입니다. 당신이 사용하는 액세스 기술에 관계없이이 문제가 존재하고 개발 프로세스가이를 처리해야한다고 생각합니다. 런타임에 데이터베이스를 재발견하는 것은 나에게 잘못된 접근법처럼 보입니다. – Pawel
@ Pawel 당신은 돈을 지불하지 않습니다. 고객은 제품 1.0을 설치 한 후 DB를 변경해야합니다. 그런 다음 고객은 새 코드를 설치하지만 스키마를 올바르게 업데이트하는 데 실패합니다. 그런 다음 제품을 실행하면 코드가 누락 된 열에서 읽으려고하면 불쾌한 예외가 발생합니다. 따라서 먼저 확인하는 것이 좋습니다. 또는 적어도 일부 유효성 검사를 시도하여 더 나은 오류 메시지를 표시하고 종료 할 수 있습니다. – gbjbaanb
(https://stackoverflow.com/users/474702)이 목적을 지금 결코 이상의 – user326608
개선을위한! 너무 나쁘다 "EF를 더 이상 사용하지 마십시오 :) –