2009-08-07 13 views
3

名前は同じですが、異なるスキーマの複数のテーブルを持つデータベースがあります。Linq2Sql:同じ名前と異なるスキーマ名を持つテーブルを扱う方法

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

Linq2Sqlこのデータベース用のコードを生成する場合、それはちょうど最初のスキーマからテーブルをピックアップし、完全に第二スキーマ無視ように見える:

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

これは効果的になるが、それは不可能例えばLinq2Sqlを使用して2番目のスキーマのテーブルをクエリします。このための回避策はありますか?私が持っているように、

私の最初のアイデアは、手動で生成されたコードを編集することです:

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

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

が、データベースの変更は巨大な苦痛になり、このコードを毎回維持すること。他のアイデア?

答えて

1

これはもはや私は2つのテーブル、ターゲット、およびスキーマを1にバインドされ、スキーマBに他のバインドされた名前の両方を作成したVisual Studioの2010年の問題であるように見えません。 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

ええ、両方のクラスを別々に生成するのは良いことですが、問題はクラスの名前です。どのスキーマのターゲットポイントをターゲット1と区別することができますか?私はそれらにatargetやbtarget、またはa_targetやb_targetのような名前を付けることを好みます。 –

+0

@lfoust - デザイナーからいつでも名前を編集できます。 – arcain

+0

私はデザイナーか生成されたコードで編集するかどうかにかかわらず、データベースが変更され、モデルを再生成する必要があるたびに再編集する必要があるという問題があります。 –

関連する問題