有没有办法将字符串数组而不是单独的参数传递给 Entity Framework class?

Is there a way to pass a string array instead of separate parameters to an Entity Framework class?

目前,我有一个程序使用 OleDb 从 Excel sheet 中获取数据并使用 Entity Framework 将其导入 SQL 服务器数据库。

为了弥补OleDb和EF之间的差距,我将数据从Excel sheet推入DataTable,进入DataTable获取所有一行中的数据,将其放入以逗号分隔的 StringBuilder 中,然后将该 StringBuilder 对象转换为以逗号分隔的字符串数组。然后,我调用 Add 函数以使用 EF 将数据导入数据库。

在下面显示的代码中,您可以看到我必须调用

Name = data[0], Message = data[1]

等将数据推送到数据库中。有没有一种方法可以将字符串数组传递给 class 而不是每个单独的参数并在那里处理数据?

public static void Insert(string Sheet, OleDbConnection conn)
{
        OleDbCommand command = new OleDbCommand("SELECT Name, Message, Message type FROM [" + Sheet + "$]", conn); //Selects everything inside excel file
        DataTable Data = new DataTable();

        OleDbDataAdapter adapter = new OleDbDataAdapter(command);
        adapter.Fill(Data); //Puts all data inside a DataSet

        StringBuilder sb = new StringBuilder();
        var context = new DataWarehouseContext();

        // Prints out DataSet
        foreach (DataRow dataRow in Data.Rows)
        {
            foreach (var item in dataRow.ItemArray)
            {
                sb.Append(item);
                sb.Append(",");
            }

            string[] data = sb.ToString().Split(','); //Gets data for each item in vHealth Insert method
            context.RvtoolsVHealth.Add(new RvtoolsVHealth { Name = data[0], Message = data[1], MessageType = data[2] });
            context.SaveChanges();
        }
}

任何指点都很好,谢谢!

不是以内置方式。您 可以 RvtoolsVHealth 创建一个构造函数,它接受一个字符串数组并设置属性,但在我看来这是一个糟糕的 API 因为没有办法确保属性映射到适当的数组值。如果数组按顺序包含消息类型、消息和名称怎么办?

你正在做的是实例化对象的规范方法。

我要说的是,您连接字符串只是为了将其拆分出来,这似乎浪费了一些能量。为什么不直接从 dataRow 中提取值:

foreach (DataRow dataRow in Data.Rows)
{
    context.RvtoolsVHealth.Add(new RvtoolsVHealth { 
        Name        = dataRow[0].ToString(), 
        Message     = dataRow[1].ToString(), 
        MessageType = dataRow[2].ToString() 
        });
    context.SaveChanges();
}

您甚至可以更进一步,使用 OleDbDataReader 来读取值,而不是花时间填写 DataTable