2010-10-05 75 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同义词。