2012-04-20 5 views
0

私は4つのデータベースに接続したプログラムを持っています。これら3つのデータベースでは、エンティティオブジェクトは非常に似ています。さて、私の質問はとてもシンプルですが、私はどのように進行するかについて頭を落とすことはできません。多くの類似オブジェクトへのエンティティは、とにかくそれらをインターフェイスを共有させることができますか?

は私が持っている3つのデータベースはのは仕方がに私のためにそこにある私は1Aと2Aと3Aはほぼ同じであるので、私が求めている複数テーブルABとC

を得たもので1 2及び3 それらを呼びましょうこのようなことをしてください。 ?

Using(interfaceDB DB = new DB1()) 
{ 
    var getTabelA = (from a in DB.a select a); 
} 
Using(interface DB = new DB2()) 
{ 
    var getTabe2A = (from a in DB.a select a); 
} 
Using(interface DB = new DB3()) 
{ 
    var getTabe3A = (from a in DB.a select a); 
} 
foreach(interfaceDBTableA in getTabelA) 
{ 
    //do something here 
} 
foreach(interfaceDBTableA in getTabe2A) 
{ 
    //do something here 
} 
foreach(interfaceDBTableA in getTabe3A) 
{ 
    //do something here 
} 

基本的に私の希望は、私はその後、それ自身のメソッドにループ部を入れて、個々のテーブルにそれをカスタマイズする必要がなく、それを再利用できることがありますか?

+0

テーブルは類似しているか、同じですか?特に、必要とするデータは各データベースでまったく同じですか、それとも異なるのですか?各データベースと異なる列が必要な場合や、データ型と構造が多少異なる場合は、このタスクに実際にインターフェイスを使用することはできません。 –

+0

テーブルは若干異なりますが、この場合はすべて同じカラムが必要です – Helbo

答えて

0

あなたのオブジェクトは、このように、共通しているメンバー含むインターフェイスを定義することができます:クラスABCにそのインターフェイスを実装し、その後...

public interface ICommonStuff 
{ 
    int CommonInt 
    { 
     get; 
    } 

    string CommonString 
    { 
     get; 
    } 
} 

を:

public class A : ICommonStuff 
{ 
    public int AInt { get; set; } 

    public string AString { get; set; } 

    public int CommonInt 
    { 
     get { return this.AInt; } 
    } 

    public string CommonString 
    { 
     get { return this.AString; } 
    } 
} 

public class B : ICommonStuff 
{ 
    public int BInt { get; set; } 

    public string BString { get; set; } 

    public int CommonInt 
    { 
     get { return this.BInt; } 
    } 

    public string CommonString 
    { 
     get { return this.BString; } 
    } 
} 

... (same for C) 

次に、次のように選択する必要があります。

using (interfaceDB DB = new DB1()) 
{ 
    var getTable1A = (from a in DB.a select a).Cast<ICommonStuff>(); 
} 

using (interface DB = new DB2()) 
{ 
    var getTable2A = (from a in DB.a select a).Cast<ICommonStuff>(); 
} 

using (interface DB = new DB3()) 
{ 
    var getTable3A = (from a in DB.a select a).Cast<ICommonStuff>(); 
} 

var everythingLikeA = getTable1A.Concat(getTable2A).Concat(getTable3A); 

foreach (ICommonStuff commonStuff in everythingLikeA) 
{ 
    // do something here with commonStuff.CommonInt and commonStuff.CommonString 
} 
+0

これは私の最初のアイデアでしたが、クラスA、B、Cはエンティティであるため、すでに実装されています。彼らは最終的に私の変更を削除する彼ら自身を上書きするでしょう – Helbo

+0

"既に実装されている"何?上書きに対するあなたの懸念は、それがT4テンプレートであることを示しています。エンティティフレームワークですか?既存の実装が部分クラスにある場合は、インタフェースを実装する別々の部分を書くことができます。 –

+0

はいそれはエンティティフレームワークです hmm私はそれが今では役に立ちそうですか? – Helbo

関連する問題