我在一个命名实例中的单个数据库上有一个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