如何将数据库中的行映射到对象列表?

时间:2015-10-06 07:41:22

标签: c# dapper filehelpers

下面是对象和.txt文件的示例类,我使用filehelpers创建此类,然后使用FileHelpers读取.txt文件,并将此文件转换为这些对象,并将它们放入List中。

.txt文件:

1122233
4455566

示例类:

[FixedLengthRecord(FixedMode.AllowLessChars)]
public class Example
{

    [FieldFixedLength(2)]
    public string first;

    [FieldFixedLength(3)]
    public string second;

    [FieldFixedLength(2)]
    public string third;
}

用filehelpers读取这个给我2个Example对象。第一个Example.first值为'11'等。 我通过将List转换为DataTable并使用SqlBulkCopy将数据推送到数据库中。一切顺利。

数据库中的表只包含3列(varchar)和列名;第一,第二和第三。

当我尝试从数据库中取回数据并将其映射回List时出现问题,我使用以下代码(使用Dapper):

IDbConnection connection = new SqlConnection(connectionString);
var rows = connection.Query<Example>("select * from examplesTable");
        foreach (Example e in rows)
        {
            examples.Add(e);    //List<Example> examples
        }

这将返回正确的行数,但是如果我尝试从对象中获取数据,则它包含空数据。我无法弄清楚我做错了什么。

2 个答案:

答案 0 :(得分:1)

不可能只编写foreach (Example e in rows),您应该为Example创建构造函数,它将根据每行的数据创建一个Example对象。它看起来有点像

foreach (DaraRow r in rows)
        {
            Example e = new Examaple(r["First"],r["Second"]);
            examples.Add(e);    //List<Example> examples
        }

答案 1 :(得分:1)

我会检查您是否在SQL批量插入之前正确加载了数据,然后您没有从批量插入中获得任何错误。

SQL Management Studio中的表是否具有正确的数据?

如果你有正确的数据只是作为一个数据表读取,看看什么带回来,因为它将是对象值而不是特定类型。