2010-02-05 19 views
1

我目前正在使用一個大型數據庫(大約500個表格),全部沒有任何外鍵定義。無外鍵數據庫上的實體框架

我的問題是有沒有一種簡單的方法來設置實體框架(版本1或2)內的關係,而無需全部手動完成?

另外一些表格具有複雜的關係類型。例如,客戶有一個parentID,但可以鏈接到同一個表中的另一個客戶(customerID)或鏈接到帳戶表(accountID)中的一個帳戶。這種關係在實體框架中是可能的嗎?

如果這是不可能的,或者如果任何人對Enitity Framework的替代解決方案有任何意見,我更願意接受創意。 nHibernate或活動記錄會是更好的解決方案嗎?或者更容易創建我自己的業務對象和數據訪問?

乾杯

西蒙

+0

您使用的是什麼命名約定?您是否爲表示關係的所有列使用唯一且匹配的名稱? (例如,person.person_id,employee.employee_id,order.order_id,order_details.order_id,order_details.product_id,product.product_id)?如果不是,還有什麼可以用來確定不存在的FK應該是什麼? – KristoferA 2010-02-05 15:33:54

回答

6

如果沒有任何外鍵定義這樣做,那麼有沒有辦法爲實體框架來推斷關係。你必須手動定義它們。

至於你的第二個問題......不。這種關係是不可能的(這也是一個糟糕的設計選擇)。

聽起來對我來說,除非您想重構數據庫並實現具有外鍵關係的設計,否則您將不得不手動推出自己的業務對象和數據訪問層。

+0

我想說,專家可以映射奇怪的關係,但不值得與修復它的努力。 – 2010-02-05 15:40:40

+0

@Craig這將是一個有趣的實驗。我不知道EF如何強制一個字段擁有可能是某種類型的父類(當然,您可以自己編寫部分類中的代碼...但這會破壞目的)。 – 2010-02-05 15:43:00

+0

現有的數據庫關係實際上是單向的 - 您可以半可靠地從父級客戶導航到子級客戶或從帳戶導向子級客戶。所以你可以使EF關係成爲一種方式(EF 1中的EDMX可能,但不能與GUI相互作用;在EF 4中,GUI支持單向關係)。 – 2010-02-05 15:47:02