简而言之:我有一些数据库表数据要用来填充c#结构。
例如:
struct Phone
{
public int PhoneID;
public string Number;
}
struct Patient
{
public Phone WorkPhone;
}SQL表如下所示:
Patient table:
Patient ID, Patient Name, etc.
Phone table:
PhoneID, Number, Phone Type etc. 基本上,结构是SQL表的镜像。
我有通过select语句传递的主键(PhoneID)。因此,对于patient表,我将只检索一行,对于Phone表,我将最多检索5行(它们可以包含Work、Cell、Home等)。
我没有一个很好的方法来轻松地将这个表填充到一个结构中。我现在做的是一个接一个。你可以看到每个病人有数百个变量,这是一个非常乏味和高度代码密集型的过程。有没有办法,也许我可以在变量名中有一个变量,例如,如果列名是Phone,那么它就会填充Phone变量。希望这是有意义的。
query = "SELECT * FROM Phone p WHERE p.StatusID = 'A' AND ObjectTypeID = 'PA' AND ObjectID = '" + PatientID.ToString() + "'";
SqlDataAdapter a1 = new SqlDataAdapter(query, dataConnection);
DataTable t1 = new DataTable();
a1.Fill(t1);
DataTableReader r1 = t.CreateDataReader();
//object value = null;
while (reader.Read())
{
for (int i = 0; i < r1.FieldCount; i++)
{
if (!r1.IsDBNull(i))
{
if reader.GetValue(i)
switch (r1.GetName(i))
{
case "PhoneID": { pr.HomePhone.PhoneID = (int)reader.GetValue(i); break; }
case "PhoneTypeID": { pr.HomePhone.PhoneTypeID = (string)reader.GetValue(i); break; }
case "ObjectID": { pr.HomePhone.ObjectID = (int)reader.GetValue(i); break; }
case "ObjectTypeID": { pr.HomePhone.ObjectTypeID = (string)reader.GetValue(i); break; }发布于 2012-01-08 11:39:37
你可能需要像NHibernate、Lightspeed或Entity Framework这样的对象关系管理。
如果它们被夸大了,可以看看像Massive这样的新的迷你ORM类库。
发布于 2012-01-08 11:37:16
成熟的ORM可能是不可能的,但您可以使用反射将datatable中的值映射到对象。或者,您也可以求助于Automapper之类的东西。
发布于 2012-01-09 07:25:09
Dapper (stackoverflow轻量级对象映射器)似乎是一个强有力的候选者。到目前为止,在一些项目中使用了它,并且很喜欢它。简单,快速,无痛。
除非结构是必需的,否则我建议切换到类。
http://code.google.com/p/dapper-dot-net/
https://stackoverflow.com/questions/8775142
复制相似问题