문제

따라서 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에는 내가 착각하지 않은 경우 동일한 작업을 수행하는 스키마 비교 제품이 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top