[英]Multiple Database connections in a LINQ to SQL DataContext
我有一个LINQ to SQL DataContext查询四个不同的表。 但我需要将其中一个表移动到另一个数据库。 是否可以为某些表创建数据库和连接字符串,为另一个表创建另一个表?
所以现在我有类似的东西:
[global::System.Data.Linq.Mapping.DatabaseAttribute(Name="DATABASE1")]
public partial class DataClassesDataContext : System.Data.Linq.DataContext
{
private static System.Data.Linq.Mapping.MappingSource mappingSource = new AttributeMappingSource();
public DataClassesDataContext() : base(global::System.Configuration.ConfigurationManager.ConnectionStrings["DATABASE1ConnectionString"].ConnectionString, mappingSource)
{
OnCreated();
}
public DataClassesDataContext(string connection) : base(connection, mappingSource)
{
OnCreated();
}
}
所以现在处理所有四个表。 我希望它能处理前3个表并且最后一个表。 这可能吗?
谢谢!
不直接; 最明显的事情是将数据上下文分成两个独立的数据上下文类(和两个dbml设置)。
如果你小心,你可以 “按原样”离开,只是明确地为每个数据上下文实例提供连接字符串,而不是使用错误的位 ,但是:这是有风险的。 特别是,保持原样意味着您仍然可能有查询尝试在现在位于不同数据库中的表之间进行连接,这将无法正常工作。
此处的数据上下文仅用于在单个数据库中工作。
当您需要的所有数据都在同一个数据库中时,Linq-to-SQL最有效。 如果您开始将表移动到另一个数据库,那么交叉数据库连接可能会很麻烦。
我们通过在包含一个数据库中的所有表的开发数据库上创建LINQ to SQL上下文,然后在生产数据库中创建同义词以指向另一个数据库中的表来解决类似问题。所有Just Works。
简要介绍它的工作原理:
开发环境:
use [TheDatabase]
go
create table Table1
{
-- stuff goes here
)
go
create table Table2
(
-- stuff goes here
}
go
create table Table3
{
-- stuff goes here
}
生产环境
use [Database2]
go
create table Table3
{
-- stuff goes here
)
use [Database1]
go
create table Table1
{
-- stuff goes here
)
go
create table Table2
(
-- stuff goes here
}
go
create synonym Table3 for Database2.dbo.Table3
显然,根据您的环境,它可能不适用于您的情况,但它对我们来说效果很好。
我在过去遇到了同样的问题,我克服这个问题的方法是按照说明移动表,然后在原始数据库中创建一个引用该表的视图。
有一个缺点是视图是只读的。 但是,今后我不推荐这种方法,我建议为每个数据库单独使用datacontexts。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.