代码之家  ›  专栏  ›  技术社区  ›  AwkwardCoder

我可以在没有引用完整性的遗留数据库中使用nhibernate吗?

  •  2
  • AwkwardCoder  · 技术社区  · 15 年前

    如果我有一个没有引用完整性或键的遗留数据库,并且它对所有外部访问都使用存储过程,那么使用nhibernate来持久化实体(对象图)是否有意义?

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

    我开始认为使用自定义ADO.NET DAL更容易:(

    干杯

    奥利

    2 回复  |  直到 15 年前
        1
  •  1
  •   ChssPly76    15 年前

    你最有可能 可以 . 但你可能不应该:—)

    Hibernate本身并不关心引用完整性;虽然它显然需要在关联表之间建立某种链接,但是实际的FK约束是否存在并不重要。例如,如果 Product 被映射为 many-to-one Vendor ,请 PRODUCTS 桌子应该有某种 VENDOR_ID 但不一定是FK。

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

    最后,如果您的SP确实用于 所有 CRUD操作(包括所有可能的查询)可能不值得尝试将Hibernate引入混合模式-您将一无所获,并且还有另一个层需要处理。

        2
  •  0
  •   AwkwardCoder    15 年前

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

    sp使用类似于以下内容的SQL语句来选择要插入到表的“id”列中的下一个id(此列只是int列,而不是标识列)。

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

    因此,一旦计算出下一个ID,它将与其他数据一起插入到表A中,然后将一行插入到表B中,其中表A的另一列上存在对表A的引用(没有外键约束),最后使用对表A的相同引用将一行插入到表C中。

    当我使用Fluent NH将此映射到NH时,映射为第一个表生成了正确的“insert”SQL语句,但当第二个表映射为“reference”时,生成了“update”SQL语句,我希望看到“insert”语句…

    现在没有标识列,没有键,没有引用完整性,这意味着我不能保证关系是一对一,一对多等等。

    如果这是真的,那么NH(fluent)如何配置…

    干杯

    奥利

    推荐文章