2016-04-07 5 views
1

一部のWebページからデータをスクラップし、データベースに挿入しようとしています。私はasp.netのMVCに新しいです カスタムコントローラメソッドまたはASP.net MVCの他の方法を使用してデータをデータベースに挿入するにはどうすればよいですか?

public partial class Product 
    { 
     public int ProductID { get; set; } 
     public string ProductName { get; set; } 
     public string ProductPrice { get; set; } 
    } 

が(それ3を習い始め

私はADO.netエンティティデータモデルを使用して生成されたモデルから見ることができますuのように商品コード、商品名、ProductPriceを含むデータベースと呼ばれる製品に一つだけのテーブルを持って数日前)、それは私をちょっと混乱させ、データを廃棄してデータベースに入れるための新しい方法をどこで作るのかわかりません。 私はProductControllerで新しいのActionResult ScrapData()メソッドを作成しようとしていたが、それは)(db.SaveChangesに来るとき、私は任意のヘルプは高く評価されてValidationError

public ActionResult ScrapData() 
{ 

    List<Product> product = new List<Product>(); 
    HtmlDocument doc = new HtmlWeb().Load("http://www.idea.rs/Proizvodi"); 
    foreach (var node in doc.DocumentNode.SelectNodes("//div[@class='g2 bp_l_1of4 bp_m_1of3 bp_s_1of2 bp_xs_1of1 item ']")) 
    { 
     Product p = new Product(); 
     p.ProductName = node.SelectSingleNode(".//span[@class='item_title']").InnerText; 
     p.ProductPrice = node.SelectSingleNode(".//span[@class='price']").InnerText; 

     product.Add(p); 

    } 

     for (int i = 0; i < product.Count; i++) 
    { 
     db.Products.Add(product[i]); 
     db.SaveChanges(); 

    } 

    return View(db.Products.ToList()); 

} 

得ます。

+0

を試すことができますか?ここ – Dilip

+0

を投稿型「System.Data.Entity.Validation.DbEntityValidationException」の例外がEntityFramework.dllで発生したが、ユーザーコードで 追加情報を扱っていなかった:検証は、1つのまたは複数のエンティティに失敗しました。詳細は、「EntityValidationErrors」プロパティを参照してください。 –

+0

「ValidationErrors」とは何ですか – ediblecode

答えて

1

あなたはデータベースモデルとあなたのProductモデルbeetwen接続を作成する必要があります。 automapper(

 for (int i = 0; i < product.Count; i++) 
      { 
       var DBModel = new Products(); 
       DBModel.ProductName = product[i].ProductName; 
       DBModel.ProductPrice = product[i].ProductPrice; 
       db.Products.Add(DBModel); 
      } 

     db.SaveChanges(); 
2

あなたはループすなわち外)(db.SaveChangesを呼び出す必要があります:

for (int i = 0; i < product.Count; i++) 
{ 
    db.Products.Add(product[i]); 
} 
db.SaveChanges(); 
+0

なぜですか?それは、より良いパフォーマンスが賢明だろうが、それは、このような高速の助けありがとうございました、彼は – ediblecode

0

マッパーを使用してみてください:

namespace Your_NameSpace 
    { 
    [Table("Products")] 
    public class Products 
     { 
      [DatabaseGenerated(DatabaseGeneratedOption.Identity)] \\ If you have identity set in table Products, if not remove this line 
      [Key] // Primary key 
      public int ProductID { get; set; } 
      public string ProductName { get; set; } 
      public string ProductPrice { get; set; } 
     } 
    } 

、ループ使用中のコントローラーの次のステップのために:たとえば

あなたのテーブルProductsはと別のクラスDBModelに作成してみてください)を使用してモデル製品をエンティティDb.Productsにマップします。

または手動で

for (int i = 0; i < products.Count; i++) 
       { 
        var product= new Products(); 
        product.ProductName = product[i].ProductName; 
        product.ProductPrice = product[i].ProductPrice; 
        db.Products.Add(product); 
       } 

db.SaveChanges(); 

これを行うことができますまたはあなたは、あなたが取得している正確などのようなエラーこの

foreach (var node in doc.DocumentNode.SelectNodes("//div[@class='g2 bp_l_1of4 bp_m_1of3 bp_s_1of2 bp_xs_1of1 item ']")) 
     { 
      Products p = new Product(); 
      p.ProductName = node.SelectSingleNode(".//span[@class='item_title']").InnerText; 
      p.ProductPrice = node.SelectSingleNode(".//span[@class='price']").InnerText; 

      db.Products.Add(p); 

     } 
    db.SaveChanges(); 
+0

を取得しているエラーを修正しません...私はそれは私が新しいプロジェクトを作ったときに動作し、それが何かはめちゃめちゃた最初からすべてのものをやり直す取得するmenaged私はコードの最初の部分をDawidで使っていましたが、ScrapDataとKypazのアイデアのためにコントローラとビューを生成しました。ループの後に魅力的なように動作します。 –