我有一个查询四个不同表的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个表并且最后一个表。这可能吗?
谢谢!
答案 0 :(得分:3)
不直接;最明显的事情是将数据上下文分成两个独立的数据上下文类(和两个dbml设置)。
如果你小心,你可以保持“按原样”,并且只是明确地为每个数据上下文实例提供连接字符串,而只是不要使用错误的位,但是:这有风险。特别是,保持原样意味着您仍然可能有查询尝试在现在位于不同数据库中的表之间进行连接,这将无效。
此处的数据上下文仅适用于单个数据库。
答案 1 :(得分:1)
当您需要的所有数据都在同一个数据库中时,Linq-to-SQL最有效。如果您开始将表移动到另一个数据库,那么交叉数据库连接可能会很麻烦。
答案 2 :(得分:0)
我们通过在包含一个数据库中的所有表的开发数据库上创建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
显然,根据您的环境,它可能不适用于您的情况,但它对我们来说效果很好。
答案 3 :(得分:0)
我过去遇到过同样的问题,我克服这个问题的方法是按照说明移动表格,然后在原始数据库中创建一个引用该表格的视图。
有一个缺点是视图是只读的。但是,今后我不推荐这种方法,我建议为每个数据库单独使用datacontexts。