2009-08-07 70 views
3

我有一个数据库具有多个具有相同名称但来自不同架构的表格。例如:Linq2Sql:如何处理具有相同名称和不同架构名称的表格

[DatabaseName].[Schema1].[MyTable] 
[DatabaseName].[Schema2].[MyTable] 

当LINQ2SQL该数据库生成代码,它似乎仅仅是从所述第一模式拾取表和完全无视第二模式:

[Table(Name="[Schema1].MyTable")] 
public partial class MyTable { } 

这有效地使得不可能使用Linq2Sql查询第二个模式上的表。有没有解决方法?

我的第一个想法是手动编辑生成的代码,使我有:

[Table(Name="[Schema1].MyTable")] 
public partial class Schema1MyTable { } 

[Table(Name="[Schema2].MyTable")] 
public partial class Schema2MyTable { } 

但不必每次都保持这种代码数据库的变化将是一个巨大的痛苦。任何其他想法?

回答

1

看起来这不再是在Visual Studio 2010的问题,我创建了两个表,并重命名为目标,并绑定一个模式一个,另一个绑定到架构b。我添加了DBML并将两个目标表(一个显示为目标(a),另一个目标(b)在服务器资源管理器中)拖放到设计器上。这创建了一个类目标和另一个名为目标1。生成的代码(编辑为清楚起见)显示工具现在生成就像你上面的例子代码类:

[global::System.Data.Linq.Mapping.TableAttribute(Name="a.target")] 
public partial class target 
{ //... class implementation snipped 
} 

[global::System.Data.Linq.Mapping.TableAttribute(Name="b.target")] 
public partial class target1 
{ // ... class implementation snipped 
} 
+0

是的,这是伟大的,它两个,但问题产生单独的类是类的名称。你怎么知道哪些模式目标点vs target1?我更喜欢将它们命名为atarget和btarget或a_target和b_target。 – 2011-01-28 22:22:20

+0

@lfoust - 你可以随时编辑设计师的名字。 – arcain 2011-01-28 23:34:21

+0

无论我是在设计人员还是在生成的代码中编辑它,每当数据库发生更改并且模型必须重新生成时,我仍然需要重新编辑它。 – 2011-02-11 20:50:03