c# - 有没有办法将字符串数组而不是单独的参数传递给实体框架类?
问题描述
目前,我有一个程序使用 OleDb 从 Excel 工作表中获取数据并使用实体框架将其导入 SQL Server 数据库。
在弥合 OleDb 和 EF 之间的差距时,我将 Excel 工作表中的数据推送到 aDataTable
中,进入DataTable
获取单行中的所有数据,将其放入StringBuilder
以逗号分隔的 a 中,然后将该StringBuilder
对象转换为字符串数组被逗号隔开。然后,我调用该Add
函数以使用 EF 将数据导入数据库。
在下面显示的代码中,您可以看到我必须调用
Name = data[0], Message = data[1]
等将数据推送到数据库中。有没有一种方法可以将字符串数组传递给类而不是每个单独的参数并在那里处理数据?
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();
}
您甚至可以更进一步,使用 aOleDbDataReader
来读取值,而不是花时间填写 aDataTable
推荐阅读
- python - Python 中 Lambda 表达式与局部函数的速度测试
- parsing - 如何在jison中编写自定义函数和变量?
- ios - 如何在swift中执行条件segue操作?
- r - 如何在R中循环和列出随机样本
- android - 如何以编程方式获取 Android 上 /data/user/0/com.companyname/files 位置上方的文件夹?
- java - 如何检索按 ID 分组的所有实体?
- javascript - 您如何在 discord.js 中使用带有 awaitMessages 的 set Interval,我想让它按顺序排列
- c++ - 如何判断c++向量中的值类型(int或double)?
- react-native - FacebookAds:新应用不再支持广告请求中的 SDK 版本
- reactjs - 使用 npm 的 MQTT 包在 React 中操作不安全