2009-10-16 30 views
0

我有3個數據庫表,它們都具有相同的5列。 他們在表#2和表#3中各有不同的ID列。3個表,3班,幫助設計我的課有效

我不想爲它創建一個單獨的3類,但問題是在我的數據庫輔助類我有一個加載的類,就像一個方法:

public static LoadClass1(SqlDataReader reader) 
{ 
    Class1 c1 = new Class1(); 

    c1.prop1 = (int)reader["prop1"] 

} 

我不想必須創建3個獨立的加載助手方法,並且必須在所有這些方法上覆制代碼。 (我不介意創建3,但只需設置每個領域不同的字段)。

回答

3

四種方法:一個加載的核心領域,其他三個調用的核心方法,並加載額外的領域。這對於具有核心屬性的基類以及3個子類來說效果最好。

//Psuedo code, obviously not exact 
//Don't hate 
public abstract class Core 
{ 
    int field1; 
    int field2; 
    int field3; 
    int field4; 
    int field5; 
} 

public class Sub1 : Core 
{ 
    field 6; 
} 

... 

public static void LoadCore(Core c, DataTable dt) 
{ 
    c.field1 = dt.getField1(); //Really a database value 
    c.field2 = dt.getField2(); 
    c.field3 = dt.getField3(); 
    c.field4 = dt.getField4(); 
    c.field5 = dt.getField5(); 
} 

public static Sub1 LoadSub1() 
{ 
    Sub1 s = new Sub1(); 
    LoadCore(s, MY_DATA_TABLE); 
    s.field6 = MY_DATA_TABLE.getField6(); 
} 
+0

使「LoadCore」的私有方法 – cortijon 2009-10-16 15:33:39

1

你可能創建的所有公共字段的基類,那麼具有延伸包含額外的領域的基礎類其他類。

什麼,我腦子裏想的是

class MyBase 
{ 
    public MyBase() 
    { 
    // load the base class stuff. 
    } 
    int f1; 
    int f2; 
    int f3; 
    int f4; 
    int f5; 
} 

class MyClass2 : MyBase 
{ 
    public MyClass2() : base() 
    { 
    // load the MyClass2 f6 
    } 

    int f6; 
} 

class MyClass3 : MyBase 
{ 
    public MyClass3() : base() 
    { 
    // load the MyClass3 f7 
    } 

    int f7; 
} 
0

如果你不介意使用反射,這樣的事情可以被調整,以適應您的需求:

Generic List Provider

你只需要返回一個牛逼而不是列表其中。

希望它有幫助。

1

你可以通過的GetSchemaTable與BaseTableName屬性來獲取表名和相應的檢索你的領域。