NHibernate和代码优先

And*_*ndy 8 nhibernate fluent-nhibernate

您是否在实际应用程序中使用SchemaExport和SchemaUpdate?最初,您创建模型然后生成模式?它有用吗?或者,您只将它用于测试......

通常,我创建db(使用visual studio数据库项目),然后使用设计器创建映射和持久类或EF实体.但现在,我想尝试使用Fluent NHibernate进行代码优先.

我研究了SchemaExport和SchemaUpdate,发现了一些问题.例如,update不会删除db对象,如果表存在则创建非空列,如nullable,不会在多对多表上生成主键,依此类推.这意味着我必须经常重新创建数据库.但是,数据是什么?并且,如何将更改部署到生产数据库等等......

我想知道您是否真的在您的应用程序中使用代码和SchemaExport(SchemaUpdate)?也许你可以给我一些建议......

Gab*_*art 8

我在生产中使用SchemaUpdate.这是安全的,因为它永远不会像删除列那样进行破坏性操作.但是,它不是更新数据库的综合解决方案.如果您使用它,您仍然需要使用脚本来补充它以更新您的模式,以执行删除(如您所述),索引,更改列类型,添加表数据等操作.但SchemaUpdate涵盖了90%的情况.

我发现的唯一缺点是,随着时间的推移,它似乎偶尔会向我的表添加重复的外键约束.

还有一件事:您应该从构建工具手动运行SchemaUpdate,而不是您的应用程序本身.为应用程序提供修改db模式的权限是不安全的!