我可以将nHibernate与没有参照完整性的遗留数据库一起使用吗?

时间:2009-08-26 16:19:45

标签: nhibernate referential-integrity legacy-database

如果我有一个没有参照完整性或密钥的遗留数据库,并且它使用存储过程进行所有外部访问,那么使用nHibernate来持久保存实体(对象图)是否有任何意义?

另外,SP不仅包含CRUD操作,还包含业务逻辑......

我开始认为坚持使用自定义ado.net DAL会更容易:(

干杯

奥利

2 个答案:

答案 0 :(得分:1)

你很可能 CAN 。但你可能不应该: - )

Hibernate本身并不关心参照完整性;虽然它显然需要在关联的表之间建立某种联系,但是否存在实际的FK约束并不重要。例如,如果Product被映射为many-to-oneVendor,则PRODUCTS表中应该包含某种VENDOR_ID,但不一定是一个FK。

根据您的SP签名,您可能会或可能无法在映射中将它们用作自定义CRUD;如果SP确实具有在所有CRUD操作期间应用的业务逻辑,那么这可能是您的第一个潜在问题。

最后,如果你的SP确实用于所有 CRUD操作(包括所有可能的查询),那么尝试将Hibernate引入混合可能是不值得的 - 你几乎什么都得不到你将有另一层要处理。

答案 1 :(得分:0)

好吧,问题的一个例子是:

SP使用类似于以下内容的sql语句来选择要插入表的“Id”列的下一个Id(此列只是一个int列,但不是标识列),

声明:'从客户'中选择@cus_id = max(id)+ 1,

所以一旦计算出下一个id,它就会插入到表A中,并带有其他数据,然后在表B中插入一行,其中表A中的另一列上有表A(没有外键约束),最后是使用与表A相同的ref将行插入表C中。

当我使用流畅的NH将其映射到NH时,映射为第一个表生成了正确的'insert'sql语句,但是当第二个表被映射为'Reference'时,生成了'update'sql语句,我是期待看到'插入'声明......

现在事实上没有标识列,没有密钥,没有参考完整性意味着我不能保证关系是一对一,一对多等...

如果这是真的,NH(流利的)如何配置......

干杯

Ollie