2010-10-05 3 views
1

У меня есть DBML в одной базе данных в именованном экземпляре. Экземпляр имеет связанный сервер с другой базой данных MSSQL на другом сервере/экземпляре. Оба экземпляра и базы данных имеют одного и того же пользователя уровня dbo. Обе базы данных - MSSQL 2008.Доступ к DBML Linq to SQL через связанный сервер?

У меня есть код C# (Framework 3.5), который использует DBML, который обращается к таблицам и представлениям и sprocs на DatabaseA. Теперь мне нужно получить доступ к таблице в DatabaseB. Каков самый умный способ для моего кода получить доступ к таблице/сущности через соединение связанного сервера?

Спасибо.

ответ

2

Один простой способ сделать это - создать виды внутри DatabaseA, которые инкапсулируют enities с другой стороны. Вам нужно будет вручную определить первичные ключи и отношения для этих объектов в вашем файле .dbml. Как только это будет сделано, они могут работать так же, как и любая другая таблица с функциональностью CRUD, если служба DTC работает на DatabaseA.

+0

Спасибо за ответ. Моя проблема заключается в том, что я не могу изменять какие-либо изменения схемы базы данных. – Snowy

+0

Это более проблематично, если вы можете запросить изменения? Если нет, я не вижу другого способа, если вы не можете поговорить с DatabaseB из другого контекста или соединения dbml. – James

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 синонимов в Entity Framework и LINQ-to 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 как этот, но с использованием Entity Framework, которая использует тот же принцип, используя SQL Синоним.

Смежные вопросы