使用Entity Framework将数据表数据插入数据库?

时间:2014-03-14 12:35:26

标签: entity-framework c#-4.0 datatable

我有一个数据表,我想使用Entity Framework将数据插入数据库(SSMS)。什么是可行的解决方案?

2 个答案:

答案 0 :(得分:3)

DataTable是原始行和列 - 实体框架与.NET对象一起使用,这基本上是其他东西。

因此,您不能轻松使用EF从DataTable插入行和列。

要么需要遍历你的DataTable并从这些行中构建对象&amp;列,将它们粘贴到List<YourObject>中,然后使用EF ....将这些对象持久保存到数据库中。

您只需跳过EF并使用原始ADO.NET(DataTableSqlDataAdapterSqlCommand将“原始”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();
       }