sti*_*k81 36 .net database nhibernate fluent-nhibernate c#-4.0
我有一个应用程序,我使用Fluent Nhibernate来创建我的数据库.到目前为止,我每次都在重新创建数据库模式.执行此操作的代码是:
public NhibernateSessionFactory(IPersistenceConfigurer config)
{
_sessionFactory = Fluently.Configure().
Database(config).
Mappings(m => m.FluentMappings.AddFromAssemblyOf<MappingsPersistenceModel>()).
ExposeConfiguration(BuildSchema).
BuildSessionFactory();
}
private static void BuildSchema(Configuration config)
{
// if (DbExists(config))
// return;
new SchemaExport(config).Create(false, true);
}
Run Code Online (Sandbox Code Playgroud)
注意" if (DbExists(config))".这就是我想做的.我只想在它实际上不存在的情况下创建模式.在下一步 - 如果它不是最新的,我想更新它.
我该如何实现这一目标?我期待一个config.DatabaseExists(),但我看不到这样的事情.我看到了hacky解决方案的一些可能性,但是处理这个问题的典型推荐方法是什么?
Gab*_*art 70
您只需使用SchemaUpdate它,它将更新架构(如果存在)并创建它(如果它不存在):
public NhibernateSessionFactory(IPersistenceConfigurer config)
{
_sessionFactory = Fluently.Configure().
Database(config).
Mappings(m => m.FluentMappings.AddFromAssemblyOf<MappingsPersistenceModel>()).
ExposeConfiguration(cfg => new SchemaUpdate(cfg).Execute(false, true)).
BuildSessionFactory();
}
Run Code Online (Sandbox Code Playgroud)
一个警告:SchemaUpdate不进行破坏性更新(删除表,列等).它只会添加它们.
Vad*_*dim 10
更新(感谢dotjoe)
Hbm2ddl只能执行模式差异,只能更新SchemaUpdate类更改的内容.然而,这个类非常简陋,因为它只需要查看当前实体以及模式的不同之处.如果已经进行了重大更改(即删除了实体或删除了链接表),它将无法解决这个问题.
在早期的项目中,我们使用了hbm2ddl,但是我们已经开始使用Fluent Migrator了.我想说最好的办法是使用迁移工具,如Fluent Migrator或Migrator.NET.
http://github.com/schambers/fluentmigrator/
http://code.google.com/p/migratordotnet/
| 归档时间: |
|
| 查看次数: |
22943 次 |
| 最近记录: |