2010-10-05 65 views
1

我在一個命名實例中的單個數據庫上有一個DBML。該實例具有到另一個服務器/實例中的另一個MSSQL數據庫的鏈接服務器。實例和數據庫都有相同的dbo級別的用戶。這兩個數據庫是MSSQL 2008.Linq到SQL DBML跨鏈接服務器訪問?

我有一些C#代碼(Framework 3.5),它使用DBML訪問DatabaseA上的表和視圖和sprocs。我現在需要訪問DatabaseB上的一個表。我的代碼通過鏈接服務器連接到達表/實體的最明智的方法是什麼?

謝謝。

回答

2

這樣做的一個簡單的方法是在DatabaseA中創建封裝另一側的實體的視圖。您必須在.dbml文件中手動定義這些實體的主鍵和關係。完成此操作後,只要DTC服務在DatabaseA上運行,它們就可以像任何其他具有CRUD功能的表一樣工作。

+0

感謝您的回覆。我的問題是我無法進行任何數據庫模式更改。 – Snowy 2010-10-05 15:39:59

+0

你可以請求更改嗎?如果沒有,除非你可以從另一個dbml上下文或連接與DatabaseB交談,否則我真的沒有看到任何其他方式。 – James 2010-10-05 16:38:42

0

嘗試添加鏈接的服務器到本地:

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 
1

我曾使用SQL同義詞實體框架和LINQ - 到 - SQL,您可以創建SQL Synonnym以指向鏈接的服務器對象,如下所示:

Add SQL Synonym

然後執行一個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同義詞。