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

C# 如何使用自定义控制器方法或ASP.net MVC中的任何其他方法将数据插入数据库?,c#,asp.net,asp.net-mvc,asp.net-mvc-4,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; }

我试图从某个网页中删除数据并将其插入数据库。我在数据库中只得到一个名为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的新手(三天前开始学习),所以它让我有点困惑,我不知道在哪里可以创建新的方法来废弃数据并将其放入数据库。 我试图在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());

}
public ActionResult ScrapData()
{
列表产品=新列表();
HtmlDocument doc=新建HtmlWeb()。加载(“http://www.idea.rs/Proizvodi");
foreach(doc.DocumentNode.SelectNodes中的变量节点(//div[@class='g2 bp\u l\u 1of4 bp\u m\u 1of3 bp\u s\u 1of2 bp\u xs\u 1of1项']))
{
产品p=新产品();
p、 ProductName=node。选择SingleNode(“.//span[@class='item\u title']”)。InnerText;
p、 ProductPrice=node。选择SingleNode(“.//span[@class='price']”)。InnerText;
产品。添加(p);
}
对于(int i=0;i

非常感谢您的帮助。

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

for (int i = 0; i < product.Count; i++)
{
    db.Products.Add(product[i]);
}
db.SaveChanges();
for(int i=0;i
您必须创建数据库模型和您的
产品
模型之间的连接

例如,您的表
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();
for(int i=0;i
尝试使用映射器(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();

您得到的确切错误是什么?在此发布EntityFramework.dll中发生类型为“System.Data.Entity.Validation.DbEntityValidationException”的异常,但未在用户代码中处理其他信息:一个或多个实体的验证失败。有关详细信息,请参阅“EntityValidationErrors”属性。什么是
ValidationErrors
为什么?这将是更好的性能明智的,但它不会修复错误,他正在得到感谢你们大家这么快的帮助。。。当我创建新项目并从头开始重做所有事情时,我想让它工作起来。这是一件混乱的事情,因为我删除了许多搭建的项目等…使用Dawid的第一部分代码,我生成了controller和view for ScrapData,并使用Kypaz的思想将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();