【发布时间】:2014-03-14 12:35:26
【问题描述】:
我有一个数据表,我想使用实体框架将数据插入数据库(SSMS)。什么是可行的解决方案?
【问题讨论】:
标签: entity-framework c#-4.0 datatable
我有一个数据表,我想使用实体框架将数据插入数据库(SSMS)。什么是可行的解决方案?
【问题讨论】:
标签: entity-framework c#-4.0 datatable
DataTable 是原始行和列 - Entity Framework 与 .NET 对象一起使用,这基本上是另外一回事。
因此,您不能轻松使用 EF 从DataTable 插入行和列。
您要么需要遍历您的 DataTable 并从这些行和列构建对象,将它们粘贴到 List<YourObject> 中,然后使用 EF 将这些对象保存到数据库中... .
或您只需跳过 EF 并使用原始 ADO.NET 将“原始”DataTable 持久保存到数据库(SqlDataAdapter 或 SqlCommand 与 INSERT 语句)。
更新:
好的,所以您想将您的DataTable 转换为对象。你需要有一个类来代表你在数据库中的实体——因为你没有提供任何信息,我只是将它称为MyObject
public class MyObject
{
// define some properties
public int ID { get; set; }
public string Name { get; set; }
// whatever else this object has
}
您很可能已经有这样一个对象 - entity 类 - 存在于您的数据库中。
然后你需要定义一个方法将数据表转换为对象列表:
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;
}
【讨论】:
我发现了另一种相同的方式,但代码更少,而且我认为更容易。我想我应该在这里分享它,可能会帮助其他人。
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();
}
【讨论】: