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

How to map rows from a database into a list of objects?

下面是对象和 .txt 文件的示例 class,我使用 filehelpers 创建这个 class,然后我使用 FileHelpers 读取一个 .txt 文件并将这个文件转换成这些对象,我把它们放在一个列表中。

.txt 文件:

1122233
4455566

示例class:

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

    [FieldFixedLength(2)]
    public string first;

    [FieldFixedLength(3)]
    public string second;

    [FieldFixedLength(2)]
    public string third;
}

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

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

当我尝试从数据库取回数据并将其映射回列表时出现问题,为此我使用了以下代码(使用 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
        }

这 returns 正确的行数,但是如果我尝试从对象中获取数据,它包含空数据。我不知道我做错了什么。

不可能只写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
        }

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

SQL管理工作室中的table是否有正确的数据?

如果您有正确的数据,请尝试将其作为数据读取 table 以查看返回的内容,因为这将是对象值而不是特定类型。