2013-05-10 54 views
2

我在Entity Framework 4.1.10331.0版本的數據庫中有自動生成的模型。忽略實體框架中的特定列?

我想忽略從實體的柱不使用流暢API和不改變ObjectContextDbContext(當然,而不刪除從SQL表中的列)和無標記與該屬性的模型生成的屬性NotMapped,因爲無論何時我在模型中更新我的上下文,該列將重新出現。

有人可以幫助我在這種情況下?

感謝和問候奔

+0

如果您想忽略,請忽略它。這與編程有什麼關係?你的意思是沒有從數據庫中獲取該列的數據或者什麼? – 2013-05-10 06:28:39

+0

是的美特我的意思不是要處理該列的數據 – 2013-05-10 06:30:51

+0

oops。我沒有注意到那個評論。你的意思是,只是不提取數據?或者你的意思是根本不在生成的類定義中包含該列(因此「myShoeSize」在代碼中從未見過,並且它只是存在於數據庫中的「祕密列」)。 – quetzalcoatl 2013-05-10 06:44:16

回答

4

我沒有看到這個問題每次生成模型時更新EF,但我可以提出2個解決方案:

  1. 創建包含列的視圖你需要,然後在EF中生成它。
  2. 創建另一個從您的實體派生的類,將顯示您想要的數據。此類將成爲您的「應用程序實體」(正如您所知,應在此處考慮額外管理)
+0

第1點聽起來不錯。謝謝:) – 2013-05-10 06:33:09

+0

很高興幫助! – noobob 2013-05-10 06:33:38

+0

@ Adrian10BEN不要忘記檢查它作爲答案,如果它是正確的:) – noobob 2013-05-10 07:10:55

0

EF數據庫優先級在很多地方都非常不足。與您的問題類似,如果您從DB生成模型並重命名CodeSpace中的列(因此列users.col_chr_UsrName只是User.Name),那麼在重新生成模型時也會丟失它。

如果我記得不錯,在EF3,EF4甚至在EF5中都沒有辦法保存它們。如果你只是「更新」模型,他們有幸存活下來,但再生不會保留任何東西。

您可以嘗試創建一個將在重新生成後運行的腳本或一組腳本,並且這些腳本可能會尋求修補程序並將其應用於生成的模型。但那就是,「解決方法」(字面上,工作和周圍),而不是一個真正的解決方案。另一件事情,更多的工作是定義將處理投影的視圖或StoredProcedures(或自定義表映射),但它們有時也可能在重新生成後變得毛茸茸(特別是自定義表格映射將永遠消失)。

實際上,您可以忽略不需要的列,並準備一組執行投影的輕型LINQ包裝器/存取器,並將它們放入一些靜態MyTables類中,並使用該類代替RawTable。這將工作,並可能可用,但不再漂亮。

恕我直言,最好的方法是使用後來修復模型的腳本,或者使用不需要的列,或者不使用設計器內的自動生成。試着找到另一個更智能的發電機。