这是一个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