2010-05-10 67 views
1

除了工作之外,一些朋友和我正在嘗試構建一個各種各樣的遊戲;我們構建它的一些方法對於一個正常的面向對象的方法來說工作得很好,但是正如大多數開發人員將證明的那樣,這並不總是將自身很好地轉化爲數據庫持久化方法。實體類;一流的繼承問題

這不是我們所擁有的絕對佈局,它只是一個示例模型。

整個項目正在C#4.0中完成,我們都打算使用Entity Framework 4.0(除非Fluent nHibernate真的能爲我們提供我們在EF中無法做到的事情)。

我們繼續運行的問題之一是在數據庫模型中繼承事物。使用Entity Framework設計器,我可以在上畫出與我下面相同的代碼;但我相信這很明顯,它不像預期的那樣工作。

澄清一點; '物品'有獎金,可以是任何東西。因此,遊戲的每個部分都必須來自類似的東西,這樣無論「變化」如何,它都處於一個基本的水平,可以被吸引。聽起來相當簡單直接,對嗎?

那麼,我們繼承了從'單元'有關遊戲的所有內容。權重,度量,隨機(像骰子一樣思考,也許?),還會有其他這樣的實體。其中一些是相似的,但在代碼中,它們每個都會有不同的反應。

我們在將這種事情抽象成數據庫模型時遇到了一個很大的問題。如果沒有「Enum」支持,那麼很難將其轉換爲多個仍然共享列表的表。我們描述的一個解決方案是使用「鑰匙圈」類型的方法,其中所有附加到字符的內容都存儲在具有「密鑰」的「環形」中,其中每個密鑰都具有表示類型的值。這在功能上起作用,但我們發現它變得非常緩慢並且表現不佳。我們也不喜歡這種方式,因爲它開始感覺好像所有東西都被「傾倒」成一個班級;這使得管理和邏輯結構難以堅持。

我希望別人可能會對我能解決這個問題有一些想法。它真的把我拉上了牆。至總結;目標是在相對全局的範圍內構建可用作基本類型(表格類型)的類型(單元),用於通用參考,而不必將所有內容都轉儲到單個集合中。我可以使用一個接口來確定實際的行爲,所以這不是太大的問題。

alt text http://img171.imageshack.us/img171/5153/modelg.png

這是「大致」在實體框架表達了同樣的想法。

alt text http://img684.imageshack.us/img684/6454/entities.png

回答

1

你試過每個具體類型映射表一爲單位?即使用Id字段鏈接Measure,Weights和Random表? (每個都有一個Id列,它們通過這個相關。)

我認爲您在Sheet和Measure之間顯示的關係在每個類映射的表中會出現問題。工作表無法映射到正確度量單位「度量」的類型類型是否由單位中的鑑別器列確定。使用TPCT,您可以成功將工作表映射到度量,因爲它可以使用Id'返回'單位表。

不幸的是,很少有TPCT的例子:有時它似乎需要{編輯模型,導出數據庫,在SSMS中進行更改,導入數據庫}的幾次迭代才能得到它。

+0

Hrnm,我已經檢查過它,它確實解決了最初的問題。但我擔心這將如何在表演中發揮作用。我想我會提出一個新話題,並闡述我將如何去做,並就性能問題徵求意見。非常感謝,這很有用。 – Ciel 2010-05-11 15:39:56