2013-02-21 41 views
4

首先:我是一個EF新手,這只是爲了測試EF的功能,並看看它如何適用於環境已經根據數據庫表和對象模型設置 - 並且當這兩個模型在類名/表名和屬性名/列名,以及表和類的數量上沒有映射1:1時。如果您想要回復這個問題,請記住「測試功能」:「EF並不意味着以這種方式使用」。謝謝! :)使用EF與現有數據庫和域/對象模型不是1:1

請考慮以下情況。

我有三個數據庫表:

|----------------|  |-------------|  |-----------------| 
| MessageLog | >---1 | Message | 1---< | MessageText | 
|----------------|  |-------------|  |-----------------| 
| logId   |  | messageId |  | messageId  | 
| messageId  |  | type  |  | languageCode | 
| from   |  | ...   |  | text1   | 
| to    |  |-------------|  | text2   | 
| ...   |        | ...    | 
|----------------|        |-----------------| 

,我想映射到兩個類:

|--------------------|  |----------------------------| 
| ServiceMessage |<-\ | ServiceMessageInstance | 
|--------------------| | |----------------------------| 
| Id: string   | | | Id: string     | 
| LanguageCode: str. | \----| Message: ServiceMessage | 
| Text1: string  |  | From: DateTime    | 
| Text2: string  |  | To: DateTime    | 
| Type: MessageType |  |----------------------------| 
|--------------------| 

ServiceMessage對象包括從消息表中的一行(有MESSAGEID爲鍵)和MessageText表中的一行(使用messageIdlanguageCode作爲鍵)。

ServiceMessageInstance更簡單:它具有對ServiceMessage對象的引用以及一些附加屬性。

我已經和EF玩了一下,做了大量的谷歌搜索,但是我還沒有找到我的問題的答案:我如何才能在EF上實現這個目標?我應該採取哪種方法?我可以用EDMX設計師來做這件事嗎? DbContext.OnModelCreating?

我意識到這可能有點太「寬」了一個問題,但我會很感激任何指針!

謝謝。

BR, 的Herms

+0

對於ASCII風格對象/數據庫模型+1:D – Carsten 2013-02-21 15:19:14

+0

它是實體分割和TPH繼承(其中'languageCode'充當判別器)的合併。我不認爲這是可以做到的。 – 2013-02-25 08:35:44

回答

0

哪種方式:-)其精心這裏解釋去的問題:http://msdn.microsoft.com/en-us/data/ee712907

爲了幫助你,你也可以安裝實體框架電動工具。

http://visualstudiogallery.msdn.microsoft.com/72a60b14-1581-4b9b-89f2-846072eff19d

有一個很好的選擇,以逆向工程代碼首先從DB。
製作一個新項目。然後在項目上右鍵單擊,在上下文菜單中應該提供 enter image description here

你應該看到添加到您的項目代碼。這對審查很有用。然後刪除臨時項目。在爲自己的代碼提供有用的部分之後。

好運

0

告訴我實際上還沒有試過這個道理了,因爲我沒有跨強迫我做的情況下這樣一來,從來沒有少我記得,當我讀「Programming Entity Framework DbContext 「我在第5章中遇到了一個名爲」映射跨多個表的單個實體「的部分,我認爲這正是你想要的。
注意

  • 上面提到的功能,稱爲「實體分隔」首先使用實體​​框架代碼,但我認爲(不知道),有可能與其他實體框架神話爲好。
  • 您不能通過數據註釋來啓用它,而必須使用Fluent API對其進行配置。
  • 要做到這一點,您需要使用Map函數。
  • 另外還有一個功能也朝向另一個方向,它允許您將多個實體映射到單個表。