我有一个数据表,我想使用Entity Framework将数据插入数据库(SSMS)。什么是可行的解决方案?
答案 0 :(得分:3)
DataTable
是原始行和列 - 实体框架与.NET对象一起使用,这基本上是其他东西。
因此,您不能轻松使用EF从DataTable
插入行和列。
你要么需要遍历你的DataTable
并从这些行中构建对象&amp;列,将它们粘贴到List<YourObject>
中,然后使用EF ....将这些对象持久保存到数据库中。
或您只需跳过EF并使用原始ADO.NET(DataTable
或SqlDataAdapter
并SqlCommand
将“原始”INSERT
保留到数据库中1}}陈述)。
<强>更新强>
好的,您希望将DataTable
转换为对象。你需要有一个代表你的实体的类 - 因为你没有提供任何信息,我只是称之为MyObject
public class MyObject
{
// define some properties
public int ID { get; set; }
public string Name { get; set; }
// whatever else this object has
}
您很可能已经拥有这样一个对象 - 一个实体类 - 存在于您的数据库中。
然后,您需要定义一个方法将数据表转换为对象列表:
public List<MyObject> ConvertDataTable(DataTable tbl)
{
List<MyObject> results = new List<MyObject>();
// iterate over your data table
foreach(DataRow row in tbl.Rows)
{
MyObject convertedObject = ConvertRowToMyObject(row);
results.Add(convertedObject);
}
return results;
}
现在你需要一个最后一个方法将一行转换为你的对象类型:
public MyObject ConvertRowToMyObject(DataRow row)
{
MyObject result = new MyObject();
// assign the properties of MyObject from the DataRow
result.ID = row.GetInt32(0);
result.Name = row.GetString(1);
// and so on .... convert the column values in the DataRow into the
// properties of your object type
return result;
}
答案 1 :(得分:2)
我发现了另一种相同但代码更少且更容易的方法。我想我应该在这里分享,可能会帮助别人。
using (var productDB = new studentDBEntities()) //JFEntity object
{
for (int i = 0; i < DataExcelTable.Rows.Count; i++)
{
DataRow dr = DataExcelTable.Rows[i];
productDB.Products.Add(new Product()
{ //add data to class objects variable
ProductName = dr["ProductNumber"].ToString(),
ProductNumber=Convert.ToInt32 (dr["ProductNumber"]),
Size=dr["size"].ToString(),
Weight=Convert.ToInt32( dr["weight"]),
Price=Convert.ToInt32(dr["price"]),
SaleStatus=Convert.ToBoolean(dr["salestatus"])
});
} productDB.SaveChanges();
}