NHibernate DB 스키마가 생성되었는지 확인할 수 있습니까?
-
13-09-2019 - |
문제
따라서 Newbie nhibernate 사용자; 내 뇌를 그 주위에 감싸려고합니다.
나는 배치를 처리하는 방법과 나중에 웹 앱 (자체 지속성 클래스가 필요할 수 있음)에 애드온을 주입하는 방법을 고려하고 있습니다.
나는 그것을 사용한다고 생각하고 있었다 SchemaExport
배포는 꽤 잘 작동하지만 스키마 내보내기가 이미 수행되었는지 아닌지에 대한 일반적인 코드 기반 방식으로 나에게 알 수있는 방법이 있는지 궁금합니다. 기본적으로 나는이 의사 코드에서와 같이 연기를하고 싶습니다.
if(!_cfg.HasSchemaForType(typeof(MyType))
ExportSchema(typeof(MyType));
else
UpdateSchema(typeof(MyType));
두 기능이 내부적으로 사용되는 곳 SchemaExport
또는 SchemaUpdate
, 각각.
편집 : 여러분, 지금까지 대답에 감사하지만, 그들은 요점을 조금 누락했습니다. 내가 설정하려는 것은 응용 프로그램이 DB를 변경해야 할 수있는 애드온의 추가 및 제거를 허용하는 방법입니다. 나는 내 자신의 코드 등을 버전에 대해 이야기하는 것이 아닙니다 (적어도 기본 기능이 아닙니다). 따라서 문제는 앱을 배포 할 때와 플러그인을 추가하거나 제거 할 때에 관한 것입니다. Theis 플러그인 (따라서 의사 코드 유형 확인)이 전에 배포 되었습니까? 그렇다면 업데이트를 실행하십시오. 그렇지 않은 경우 수출을 실행하십시오. 이해가 되나요?
해결책
아니요, Nhibernate는 당신이 요구하는 일을하지 않습니다. 스키마를 내보낸 후 데이터베이스 스키마와 비교 한 코드를 작성하는 것이 가능할 것이라고 생각합니다. 그러나 임시 데이터베이스로 내보내고 Redgate SQL 비교와 같은 타사 도구를 사용하여 스키마를 비교하는 것이 더 쉬울 것입니다.
그것이 당신이 묻는 일을했다고해도, 그것이 배치에 어떻게 도움이 될지 알지 못합니다. 그 목적은 데이터베이스를 처음부터 만들기위한 것이기 때문입니다.
추가로 편집 : 각 플러그인에 자체 테이블 세트가 있다고 가정하면 여러 가지 방법 중 하나를 사용하여 스키마가 배포되었는지 확인할 수 있습니다.
- 플러그인 객체 중 하나를로드하고 예외를 포착하려고 시도하십시오.
- 데이터베이스 스키마 (SQL Server 용 SMO 사용)를 검사하여 테이블이 있는지 확인하십시오.
- 플러그인이 배포 될 때 테이블에 레코드를 만듭니다.
다른 팁
나는 당신이 찾고있는 것이라고 생각합니다 SchemaUpdate.Execute
사용하는 대신 SchemaExport
. SchemaUpdate
스키마가 아직 존재하지 않으면 스키마를 생성하거나 필요한 경우 업데이트됩니다.
그것은 MSSQL과 SQLITE를 모두 사용하는 데 효과적입니다.
new SchemaUpdate(config).Execute(false, true);
예, 적어도 3.0에 있습니다
public static bool ValidateSchema()
{
NHibernate.Tool.hbm2ddl.SchemaValidator myvalidator = new NHibernate.Tool.hbm2ddl.SchemaValidator(m_cfg);
try
{
myvalidator.Validate();
myvalidator = null;
return true;
}
catch (Exception ex)
{
MsgBox(ex.Message, "Schema validation error");
}
finally
{
myvalidator = null;
}
return false;
}
업데이트 부분의 경우.
public static void UpdateSchema()
{
NHibernate.Tool.hbm2ddl.SchemaUpdate schema = new NHibernate.Tool.hbm2ddl.SchemaUpdate(m_cfg);
schema.Execute(false, true);
schema = null;
} // UpdateSchema
스키마 내보내기의 목적은 전체 스키마를 처음부터 생성하는 것입니다. 아직 응용 프로그램을 배포하지 않은 경우 정말 유용합니다.
첫 번째 배포 후 스키마의 추가 확장/수정에 도움이되는 마이그레이션 도구를 사용하는 것이 좋습니다. 조금 더 앞서 있다고 생각되면 응용 프로그램이 발전함에 따라 데이터 조작 (예 : 버그로 인해 생성 된 잘못된 데이터를 제거)이 필요하다는 것을 알 수 있습니다. 그것은 모두 마이그레이션 도구가 당신을 도울 수 있습니다.
조사하십시오.
다음은 .NET을위한 더 많은 마이그레이션 도구 목록입니다.
마이그레이션에 대한 원래 아이디어는 Ruby on Rails에서 비롯되었으며 과거의 다른 프레임 워크로 "클로닝"되었습니다. 그래서 원래 아이디어에 대해 읽는 것이 확실히 좋은 이유입니다. http://guides.rubyonrails.org/migrations.html 도.
VS Team Suite 또는 Database Developer Edition이있는 경우 변경 사항을 동기화하고 추적 한 다음 모든 올바른 개체를 생성하는 배포 스크립트를 만들 수 있습니다. 또한 Redgate에는 내가 착각하지 않은 경우 동일한 작업을 수행하는 스키마 비교 제품이 있습니다.