C# 如何使用自定义控制器方法或ASP.net MVC中的任何其他方法将数据插入数据库?
我试图从某个网页中删除数据并将其插入数据库。我在数据库中只得到一个名为Product的表,它包含ProductID、ProductName、ProductPrice,就像您可以从使用ADO.net实体数据模型生成的模型中看到的一样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; }
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();