2

什麼應該推動以下情況的設計考慮?級別層級定義VS(自動)生成的導航屬性

假設你有行情。

報價涉及特定的合同。

我可以下列方式定義我的班

Contract = 
    someproperty : int 

Quote: 
    contract : Contract 

然而,當我瀏覽我想,即使它在我的模型存在,才能夠做

myContract.quotes 

通常,這些屬性是使用實體框架時生成或一些其他的ORM。

但使用純內存只有類,即使從導航存在完全通用分離定義,問題。

(我猜人們可以架在成生成導航圖的傳遞閉包,從鏈接在定義中指定的子集)

我的問題是:什麼是自動繼承這些導航可能的實用方法FSharp中的屬性?我只是一個用戶,而不是一個框架開發人員,並認爲這是非常低層次的東西。

[顯然可以推廣到更復雜的類層次結構可以

  • 報價來自一個經紀人,是投標或要求的性質,有水平,是對特定的合約的Valide。
  • 合同可以是一定的到期日,比如說2013年,並且指的是一家特定的公司。
  • 公司擁有股票,等等,等等...]
+0

我會自己糾正這一點,但我不太確定「我接受的報價是否適用於特定合同。」應該讀。你的意思是說「一個特定合同的報價變得無效」嗎? – 2012-03-02 15:23:52

+0

正確,對不起 – nicolas 2012-03-02 15:27:08

回答

2

也許我誤會了;但是你能不能使用extension method來添加這種導航功能?你仍然需要調用一個函數來獲取特定合約的引號,但該助手是否存在,它可以調用你的數據提供者來獲取該聯繫人的過濾引用列表?

+0

這似乎是一個實用而且毫無意義的想法。因爲在問題發生時我正在(重新)編程,所以我以一種更一般的方式提出了這個問題,這可能不適合SO。 – nicolas 2013-11-05 09:18:42

1

哼哼,有趣的問題。

根據此blog post,您可以使用實體框架以非數據庫支持的方式執行此操作。你必須自己處理持久性。

或者你可以嘗試花費一個週末的時間自己用一個通用的F#解決方案來解決這個問題,但我會說EF在這裏足夠了嗎?

+0

確實,但我仍然必須處理代碼註釋和「id的」,我覺得應該隱藏。另外,我需要源代碼訪問類型,我沒有使用類型提供者。這意味着創建'包裝'。討厭。 – nicolas 2012-03-02 17:12:37

+0

實際上,即使是實體框架也不支持.... cf查找所有相關產品的基本操作所需的所有管道和代碼.... http://books.google.com/books?id=WdRzgaw5tlQC&pg = PA198&lpg = PA198&dq = entity + framework + transitive + closure&source = bl&ots = 3WjqLvDCgL&sig = xTioCFV08R6pF55v8tj37EQ-LLE&hl = en&sa = X&ei = gCpRT5tT4rzRBfPW5fwL& ved = 0CCMQ6AEwAA – nicolas 2012-03-02 20:19:09