【问题标题】:Entity Framework on a database without foreign keys没有外键的数据库上的实体框架
【发布时间】:2011-01-13 13:47:58
【问题描述】:

我目前正在处理一个没有任何外键定义的大型数据库(大约 500 个表)。

我的问题是,有没有一种简单的方法可以在实体框架(版本 1 或 2)中建立关系,而无需手动完成所有操作?

还有一些表具有复杂的关系类型。例如,客户有一个 parentID,但这可以链接到同一张表中的另一个客户 (customerID) 或链接到帐户表中的帐户 (accountID)。这种关系在实体框架中是否可行?

如果这是不可能的,或者如果有人对 Enitity Framework 的替代解决方案有任何意见,我非常愿意接受想法。 nHibernate 或活动记录会是更好的解决方案吗?或者创建自己的业务对象和数据访问会更容易吗?

干杯

西蒙

【问题讨论】:

  • 您使用什么命名约定?您是否对代表关系的所有列使用唯一且匹配的名称? (例如 person.person_id、employee.employee_id、order.order_id、order_details.order_id、order_details.product_id、product.product_id)?如果不是,还有什么其他方法可以用来确定不存在的 FK 应该是什么?

标签: entity-framework orm business-objects data-access


【解决方案1】:

如果您没有定义任何外键,那么实体框架就无法推断关系。您必须手动定义它们。

至于你的第二个问题……不。这种关系是不可能的(这也是一个糟糕的设计选择)。

在我看来,除非您想重构数据库并实现具有外键关系的设计,否则您将不得不手动滚动您自己的业务对象和数据访问层。

【讨论】:

  • 我会说专家可以绘制出奇怪的关系,但不值得付出努力而不是修复它。
  • @Craig 这将是一个有趣的实验。我不知道 EF 将如何强制具有可能是一种或另一种类型的父级的字段(当然,您可以自己在部分类中编写代码......但这违背了目的)。
  • 现有的数据库关系实际上是单向的——您可以半可靠地从父客户导航到子客户或从帐户导航到子客户。因此,您也可以以一种方式建立 EF 关系(在 EF 1 中的 EDMX 中可能,但不能在 GUI 中;在 EF 4 中,GUI 支持单向关系)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多