這是一個C#winforms應用程序。如何在另一個對象中存儲對象屬性的引用?
前言:
我創建一個表單,允許用戶從現有的MySQL或SQL Server數據庫中的數據導入到我的SQL Server數據庫。這使用戶可以快速導入IP地址和其他數據,而無需通過控件重新輸入IP地址和其他數據。
實施例:
簡體,我有兩個目的,FieldObject
和SensorObject
。存在FieldObject
以存儲源和目標數據庫字段名稱和類型。 SensorObject
是我稍後從數據庫中的記錄填充的對象。爲了簡單起見,我省略了與問題無關的類型處理和其他功能。 (對於DestinationField
的數據僅限於我提供用戶的列表,以及來自節目內的數組或列表。)在這裏是兩個的一個示例:
public class FieldObject
{
public string DestinationField {get; set;}
public string SourceField {get; set;}
}
public class SensorObject
{
public string Name {get; set;}
public string IPAddress {get; set;}
}
問題:
當用戶填充FieldObject
的各個字段時,我使用這些信息來填充目標數據庫,儘管我有一個大的switch語句來檢查目標字段名稱,以知道它屬於哪個屬性SensorObject
。
例如:
// Reader is a SqlDataReader with the prerequisite database connection
FieldObject myField = new FieldObject
{
DestinationField = "name",
SourceField = "proprietary"
};
SensorObject mySensor = new SensorObject();
switch (myField.DestinationField)
{
case "name":
mySensor.Name = Convert.ToString(Reader[myField.DestinationField]);
break;
case "ip_address":
mySensor.IPAddress = Convert.ToString(Reader[myField.DestinationField]);
break;
}
正如你可以看到它需要更多的冗餘代碼來處理的對象更多的屬性。
問:
我想存儲的SensorObject
屬性的某種方式,數據屬於,以便在列表迭代FieldObjects
的時候,我可以有效地消除switch語句。
喜歡的東西:
foreach(FieldObject f in myFieldList)
{
mySensor(f.mySensorField) = Convert.ToString(Reader[f.DestinationField]);
}
我不能肯定什麼技術在C#本身借給這種應用。我已經研究過參考價值和反思,而且都不合適。
我很感謝任何見解和建議,甚至重新考慮這種方法。
你可以使用ORM來解決這個問題,所以你不必編寫這個冗餘代碼? – 2010-08-17 20:36:18
對象關係映射?我懷疑如果我不需要查看「ORM」是什麼,我可能可以使用它。 :)對不起,這裏仍然是新手! – JYelton 2010-08-17 20:40:42
看看NHibernate:http://nhforge.org/wikis/howtonh/your-first-nhibernate-based-application.aspx從長遠來看,ORM消除了使用關係數據庫的大部分痛苦,然而它們需要一些工作開始。 – Zebi 2010-08-17 20:46:32