Linq to SQL DBML Доступ через связанный сервер? - PullRequest
1 голос
/ 05 октября 2010

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

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

Спасибо.

Ответы [ 3 ]

2 голосов
/ 05 октября 2010

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

0 голосов
/ 30 июня 2017

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

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");

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

0 голосов
/ 29 июня 2017

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

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
...