문제

nhibernate (또는 fluent-nhibernate)에 테이블이 존재하는지 확인하는 가장, 가장 일관된 방법은 무엇입니까?

가능합니까? 나는 그것이 무거운 의무 ORM에 대한 간단한 작업처럼 보인다는 것을 의미합니다.

또한 관련 질문에서 Nhibernate와 함께 일련의 테이블 또는 전체 스키마가 있는지 확인할 수 있습니까?

도움이 되었습니까?

해결책

구성을 어딘가에 저장하거나 세션 공장을 작성하기 전에 수행하는 경우 데이터베이스에 대해 생성 된 스키마를 검증 할 수 있습니다.

    public void ValidateSchema(Configuration config)
    {
        new SchemaValidator(config).Validate();
    }

다른 팁

SchemaUpdate의 소스 코드를 찾았습니다. SchemaUpdate가 누락 된 테이블을 감지 한 다음 업데이트 스크립트 대신 작성 스크립트를 생성 할 수 있다는 것을 알고있었습니다. 물론 답이 거기에있었습니다.

그만큼 GetTableMetadata 기능 NHibernate.Tool.hbm2ddl.DatabaseMetadata 데이터베이스에 테이블이 존재하지 않으면 객체가 NULL을 반환합니다.

일반적으로 schemaupdate는 databasemetadata 객체를 생성하고 Configuration 물체. 그러나 DatabasemetAdata를 만드는 데 필요한 것은 DBConnection 및 Dialect Object입니다.

SchemaUpdate는 다음과 같이 DataBasemetAdata를 만듭니다.

connectionHelper.Prepare();
connection = connectionHelper.Connection;
meta = new DatabaseMetadata(connection, dialect);

NHibernate.Cfg.Configuration 그런 다음 전화합니다

ITableMetadata tableInfo = databaseMetadata.GetTableMetadata(...);

이 솔루션을 검색 할 때이 질문과 응답이 Google의 어느 곳에서나 나타 났으므로, 나는 더 정확하고 간결한 방식으로 나에게 질문의 나이로 인해 효과가 있었던 것을 넣을 것이라고 생각했습니다. "istable":

var configuration = Fluently.Configure()
    .Database(MsSqlConfiguration
    .MsSql2008
    ...
    .BuildConfiguration();

    var session = configuration.BuildSessionFactory().OpenSession();

    DatabaseMetadata meta = new DatabaseMetadata((DbConnection)session.Connection, new NHibernate.Dialect.MsSql2008Dialect());
    //TABLE_NAME e.g. "hibernate_unique_key"
        if (meta.IsTable("TABLE_NAME"))
        {
        ...

이 문제를 해결하기 전에 위와 유사한 복잡한 전략을 구현했기 때문에 누군가를 도울 수 있기를 바랍니다.)

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