如何使用自定义控制器方法或ASP.net MVC中的任何其他方式将数据插入数据库?

时间:2016-04-07 13:22:20

标签: c# asp.net asp.net-mvc asp.net-mvc-4

我正在尝试从某些网页中删除数据并将其插入数据库。我在数据库中只有一个名为Product的表,其中包含ProductID,ProductName,ProductPrice,您可以从使用ADO.net实体数据模型生成的模型中看到

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

我是asp.net mvc的新手(3天前开始学习它)所以它让我感到困惑,并且无法弄清楚在哪里制作新方法来删除数据并将其放入数据库。 我试图在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());

}

感谢任何帮助。

3 个答案:

答案 0 :(得分:2)

你需要在循环外调用db.SaveChanges(),即:

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

答案 1 :(得分:1)

您必须创建连接beetwen数据库模型和您的Product模型。

例如,您的表Products尝试在另一个类DBModel中创建:

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; }
        }
     }

对于循环使用中控制器的下一步:

        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 :(得分:0)

尝试使用Mapper(automapper)将模型产品映射到实体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();