2011-07-19 104 views
0

我使用mvc3和linq 2 SQL成功從已填充的活動數據庫表中檢索數據。該表在DataClasses1.dbml中定義。在多個相同表上使用LINQ to SQL的Asp.net MVC3

現在我必須從同一SQL Server(DB1.Customers DB2.Customers ecc)上的不同數據庫中具有相同的DataClasses1結構的其他表中檢索數據,並按數據庫名稱顯示它們。

1)如何在不創建N DataClassesN.dbml的情況下做到這一點?我猜想,因爲它是同樣的表結構,我可以避免這樣做。

2)(可選):如何從新創建的數據庫表中自動檢索數據?

3)(不相關):如何定義強類型視圖?似乎我可以使用EF來完成,但我無法使用LINQ 2 SQL。

  • 我已經想過在所有客戶表中創建一個數據庫的視圖,但它似乎是一個太沉重的視圖!

  • 我有一個查詢,返回所有的數據庫名稱(從master..syttables中選擇名稱),它有用嗎?

在此先感謝

+0

你應該重新考慮你的數據庫設計。如果單個應用程序正在使用此數據,並且結構一致,並且您希望將其作爲單個數據類型使用,那麼它應該全部存在於* one *數據庫中的* one *表中。如有必要,添加一列以確定它屬於哪個「子集」。 –

+0

@Kirk Broadhurst - 有很多理由不想這樣做。例如,我開發了一個應用程序,其中有多個客戶,每個客戶在離開時都需要「隨身攜帶數據」,因此這需要讓每個客戶使用他們自己的數據庫。從程序員的角度來看,最好的辦法並不總是最好的。 –

+0

@Mystere Man - 在我看來,「拿自己的數據」並不足以給他們自己的數據庫。有200個客戶需要200個數據庫?這是無法維持的。 –

回答

2

你只是通過不同的連接字符串數據上下文當您創建它。如果數據庫是真正的一致,包括所有的外鍵關係,那麼就這樣做:

var dc = new DataClasses1(db1connectionstring); 
// Do your display of database 1 data 
var dc2 = new DataClasses1(db2connectionstring); 
// Do your display of database 2 data 

我不知道你的#2是什麼意思。數據不會自行檢索。

+0

他希望在數據庫中對數據進行分組和組合。是否有可能即使我們使用不同的連接字符串創建兩個數據上下文對象 –

+0

@Muhammad Adeel Zahid - 我已經閱讀並重讀了他的問題,並且我沒有看到他要求在數據庫中加入或分組表。他只是要求針對具有相同結構的不同數據庫使用相同的數據類。當他說「按數據庫名稱分組」時,他只是想列出數據庫名稱,然後顯示該數據庫中的數據,然後列出另一個數據庫名稱和來自THAT數據庫的數據。 –

+0

我認爲@Attila比我更喜歡談論這個問題 –

0

你不能在SQL中明顯地加入2個數據庫的結果,所以你可能必須使用2個查詢(每個數據庫一個),其中一個查詢選擇到另一個數據庫的新實體,然後加入結果之後在內存中使用LINQ。因此,一個查詢返回DB1.EntityName,另一個返回DB2.EntityName,但是將其選擇映射到新的DB1.EntityName實體,然後將這兩個實體連接起來。這不是一個漂亮的解決方案,而是我能想到的最好的解決方案。

如果您只希望每個數據庫都有一組結果,然後您可以返回2個結果集。如果我誤解了你的問題,請告訴我。

+0

其實,是的。您可以在SQL中執行跨數據庫查詢,將來自每個數據庫的表或結果連接到單個查詢中。然而,在EF或L2S中做這件事是另一回事。 –

+0

我更傾向於EF的立場。感謝澄清雖然。從EF這需要2個上下文連接,並且必須在之後合併結果。 –

相關問題