Pau*_*aul 9 asp.net nhibernate schemaexport
那么,新手NHibernate用户; 试图将我的大脑包裹起来.
我正在考虑如何处理部署,以及稍后向Web应用程序注入附加组件(可能需要自己的持久性类).
我认为SchemaExport用于部署可以很好地工作,但我想知道是否有一种方法也让NHibernate以一种基于代码的通用方式告诉我模式导出已经完成或不完成.基本上,我想做像这个伪代码中的东西:
  if(!_cfg.HasSchemaForType(typeof(MyType))
       ExportSchema(typeof(MyType));
  else
       UpdateSchema(typeof(MyType));
这两个函数将在内部使用SchemaExport或SchemaUpdate分别使用.
编辑:伙计们,我赞赏到目前为止的答案,但他们错过了一点.我正在尝试设置的是一种方法,允许应用程序添加和删除可能需要更改数据库的附加组件.我不是在谈论版本化我自己的代码之类的东西(至少不是它的主要功能).所以问题不在于我何时部署应用程序,而是关于何时添加或删除插件.是否已经部署过theis插件(因此伪代码类型检查)?如果是,请运行更新.如果没有,请运行导出.合理?
Coc*_*lla 17
我认为你所寻找的SchemaUpdate.Execute不是使用SchemaExport.SchemaUpdate如果模式尚不存在,将创建模式,或者在需要和需要时更新模式.
这对我使用MSSQL和SQLite都有效.
new SchemaUpdate(config).Execute(false, true);
Ste*_*ger 10
是的,至少在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
不,NHibernate 不会执行您所要求的操作。我想可以编写一些导出模式的代码,然后将其与数据库模式进行比较。但导出到临时数据库并使用第 3 方工具(例如 redgate SQL Compare)来比较架构可能会更容易。
即使它满足了您的要求,我也不知道这对部署有什么帮助,因为它的目的是从头开始创建数据库。
编辑添加:假设每个插件都有自己的一组表,您可以确定是否已使用以下几种方法之一部署架构:
| 归档时间: | 
 | 
| 查看次数: | 4597 次 | 
| 最近记录: |