Linq для доступа к SQL DBML через связанный сервер?

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

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

Спасибо.


person Snowy    schedule 05.10.2010    source источник


Ответы (3)


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

person James    schedule 05.10.2010
comment
Спасибо за ответ. Моя проблема в том, что я не могу вносить изменения в схему БД. - person Snowy; 05.10.2010
comment
Это более проблематично, можете ли вы запросить изменения? Если нет, я действительно не вижу другого пути, если вы не можете поговорить с DatabaseB из другого контекста dbml или соединения. - person James; 05.10.2010

Попробуйте добавить связанный сервер к вашему локальному:

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
person Alan    schedule 29.06.2017

Я использовал синонимы SQL в Entity Framework и LINQ-To-SQL, вы можете создать SQL Synonnym для указания на связанный объект Server, например:

Добавить синоним SQL

А затем выполните SQL-запрос:

Northwnd db = new Northwnd(@"c:\northwnd.mdf");
IEnumerable<Customer> results = db.ExecuteQuery<Customer>
    ("SELECT contactname FROM customersSynonym WHERE city = {0}",
    "London");

Вы можете прочитать документацию здесь, а также вы можете прочитать еще один вопрос, похожий на этот, но с использованием Entity Framework, который использует тот же принцип, с использованием синонима SQL.

person Pastor Cortes    schedule 30.06.2017