最佳实践:我应该使用nHibernate / FluentNhibernate在DB上使用FK吗?

时间:2010-12-10 10:49:10

标签: sql nhibernate fluent-nhibernate

到目前为止,我总是用FK关系强制执行我的数据库。昨天用FluentNhibernate映射一些类时,事情发生了变化。我的映射不起作用,我发现问题是由于FN创建查询的顺序。

现在出现一个问题:我应该继续使用FK强制执行数据,还是最好避免使用它,因为我专注于域类而不是sql查询?

由于

4 个答案:

答案 0 :(得分:6)

据我所知,保持数据库一致会好得多, 因为你将来可能不是唯一一个在这个DB上工作的人, 并且可能有其他人可以访问数据库并做某事可能会破坏您的数据一致性 因此,由于不再适用的假设条件,您的申请也不会以您期望的方式行事。

答案 1 :(得分:1)

让Fluent / NH在开发过程中创建你的数据库很好,但是当它投入生产时你真的应该检查所有外键,索引等等,然后只在那之后进行脚本化更改。

答案 2 :(得分:1)

保持数据库的一致性,保持参照完整性。

如果您使用的工具因此而中断,则必然会有解决方法。但是,如果您失去参照完整性以使用nhibernate - 如果您决定使用不同的ORM会发生什么?你会有一个狡猾的数据库,谁会说下一个ORM会这样?

它就像一个关注点分离的问题,应用程序的每个块应该设计得足够健壮,以便在更改或删除另一个块时生存 - 所以不要仅仅为了制作一个产品而改变良好的数据库实践它上面分层很好。

答案 3 :(得分:1)

使用域驱动方法或面向模型的方法,其中DB仅被视为“实现细节”,并不意味着您应该忽略数据的完整性。 我认为你没有理由从数据库中删除外键(和其他)约束。

数据库不仅仅是数据的存储空间。它的任务也是保护它的完整性。

完全可以将2个世界(域驱动和关系数据库)与NHibernate结合起来。确保2个区域专注于他们最擅长的领域。而且,数据库最擅长存储数据并确保数据保持有效/整数。