我在一個命名實例中的單個數據庫上有一個DBML。該實例具有到另一個服務器/實例中的另一個MSSQL數據庫的鏈接服務器。實例和數據庫都有相同的dbo級別的用戶。這兩個數據庫是MSSQL 2008.Linq到SQL DBML跨鏈接服務器訪問?
我有一些C#代碼(Framework 3.5),它使用DBML訪問DatabaseA上的表和視圖和sprocs。我現在需要訪問DatabaseB上的一個表。我的代碼通過鏈接服務器連接到達表/實體的最明智的方法是什麼?
謝謝。
我在一個命名實例中的單個數據庫上有一個DBML。該實例具有到另一個服務器/實例中的另一個MSSQL數據庫的鏈接服務器。實例和數據庫都有相同的dbo級別的用戶。這兩個數據庫是MSSQL 2008.Linq到SQL DBML跨鏈接服務器訪問?
我有一些C#代碼(Framework 3.5),它使用DBML訪問DatabaseA上的表和視圖和sprocs。我現在需要訪問DatabaseB上的一個表。我的代碼通過鏈接服務器連接到達表/實體的最明智的方法是什麼?
謝謝。
這樣做的一個簡單的方法是在DatabaseA中創建封裝另一側的實體的視圖。您必須在.dbml文件中手動定義這些實體的主鍵和關係。完成此操作後,只要DTC服務在DatabaseA上運行,它們就可以像任何其他具有CRUD功能的表一樣工作。
嘗試添加鏈接的服務器到本地:
EXEC sp_addlinkedserver
@server=N'SERVER',
@srvproduct=N'',
@provider=N'SQLNCLI',
@datasrc=N'SERVER';
SELECT * FROM sys.servers
EXEC sp_addlinkedsrvlogin '<SERVER>', 'false', '<DOMAIN>\<USERNAME>', '<USER>', '<PASSWORD>';
和訪問你的本地引用鏈接服務器:
SELECT * FROM SERVER.DB.SCHEMA.OBJECT
我曾使用SQL同義詞實體框架和LINQ - 到 - SQL,您可以創建SQL Synonnym以指向鏈接的服務器對象,如下所示:
然後執行一個SQL查詢:
Northwnd db = new Northwnd(@"c:\northwnd.mdf");
IEnumerable<Customer> results = db.ExecuteQuery<Customer>
("SELECT contactname FROM customersSynonym WHERE city = {0}",
"London");
您可以閱讀文檔here,你也可以閱讀另一個question像這樣的,但使用實體框架,它使用相同的原理,利用SQL同義詞。
感謝您的回覆。我的問題是我無法進行任何數據庫模式更改。 – Snowy 2010-10-05 15:39:59
你可以請求更改嗎?如果沒有,除非你可以從另一個dbml上下文或連接與DatabaseB交談,否則我真的沒有看到任何其他方式。 – James 2010-10-05 16:38:42