2010-08-05 50 views
1

我在當前服務層的數據訪問層上實現了存儲庫模式。在每個重用映射中映射相同表的多個Linq數據模型

我們在同一個類「的歷史筆記」上多發的對象映射對象模型(目前爲6,但很快就被更多!)

部分的使用LINQ的最佳實踐,SQL是不爲db中的每個表創建一個dbml文件,而不是將其分解,這樣在創建上下文時就沒有巨大的性能影響。

不幸的是,分離對象的邏輯位置留下了5個不同的DBML文件中的歷史筆記。當linq生成器創建類時,它會在不同的名稱空間中生成一個不同的類。

我在域模型中有一個歷史備註對象,但我不想在每次使用歷史備註時將域對象模型重新映射到數據模型中。

我不想做的事情之一是將數據的「讀取」分解爲多個查詢。

有沒有辦法將歷史筆記映射到多個數據模型中,但只寫一次映射?

感謝

皮特

解決方案

感謝您的幫助,我想我會搬回一個數據上下文中的所有數據表。

設置多個模型所涉及的工作並不值得代碼的額外複雜性和潛在的脆弱性。不得不編寫相同的左手,右手代碼來映射歷史筆記的工作量太大,太多的地方讓代碼保持同步。

爲輸入謝謝你們對LINQ的使用 到SQL的最佳實踐

回答

1

部分是不是有一個DBML 文件在數據庫的每個表,但 而是打破它,這樣 在創建上下文時沒有巨大的性能損失 。

你從哪裏聽到的?我不同意。無論表的數量如何,DataContext通常都是一個相當輕量級的對象。

在這裏看到的涉及多個數據上下文中的問題的分析:

的LINQ to SQL:單數據上下文或多個數據上下文?
http://craftycodeblog.com/2010/07/19/linq-to-sql-single-data-context-or-multiple/

在我看來,你應該有每個數據庫一個datacontext的。這也可以解決你的映射問題。

又見LINQ to SQL: Multiple/Single .dbml per project?

+0

我在各種博客中閱讀,唯一一個我仍然有鏈接的是這一個http://www.sidarok.com/web/blog/content/2008/05/02/10-tips-to-改進你的LINQ到SQL應用程序performance.html – Peter 2010-08-05 14:43:27

+0

感謝您的鏈接和您的答案羅伯特我現在正在通過他們看。 – Peter 2010-08-05 14:46:43

+0

嗨,彼得。我查看了您鏈接的博客條目,除了關於多個數據上下文的部分之外,我同意所有這些條目。數據上下文*不代表單個工作單元。該角色屬於您的資源庫對象,而不是DBML。 – 2010-08-05 14:52:28

0

一種選擇是把歷史筆記在自己的datacontext,並保持該對象和模型的其餘部分爲「IDS」之間的關係(所以只是外鍵的分貝)。無論如何,我都會這麼做。

+0

這是我想到的工作,但是這會迫使我編寫加載主要對象的代碼,然後爲筆記執行第二次加載,這將強制丟失與加載和加載的能力linq爲我完成所有這些工作。 – Peter 2010-08-06 16:48:17