最新最好的,最一致的方法来检查一个表中NHibernate的(或具有流利-NHibernate的)是否存在?

它甚至有可能?我的意思是它似乎像这样的重型ORM一个简单的任务。

另外一个相关的问题,你能不能检查,如果一组表或整个架构与NHibernate存在?

有帮助吗?

解决方案

如果您保存您的NHibernate配置的地方或做你建立你的会话工厂之前,可以验证对数据库生成的模式。

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

其他提示

我看着在SchemaUpdate工具的源代码。我知道SchemaUpdate工具可以检测到缺少表,然后生成一个脚本创建,而不是更新脚本。果然,答案是没有。

GetTableMetadata对象的NHibernate.Tool.hbm2ddl.DatabaseMetadata函数将返回空值如果表中不数据库存在。

通常,SchemaUpdate工具创建一个DatabaseMetaData对象并将在成Configuration对象。但它看起来像所有你需要创建一个DatabaseMetaData的是DBConnection的和方言对象。

SchemaUpdate工具创建一个DatabaseMetaData正是如此:

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

然后NHibernate.Cfg.Configuration调用

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

这个问题和应对谷歌这样的解决搜索时弹出无处不在,所以我想我会放什么工作[由于年龄的问题,很可能是另外在一个更为精确和简洁的方式为我; “的 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