我正在尝试从某些网页中删除数据并将其插入数据库。我在数据库中只有一个名为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());
}
感谢任何帮助。
答案 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();