如何解决如何从Edit View ASP.NET MVC更新两个表?
我正在尝试更新两个表中的数据; products
和inventory
。表products
的主键是cod_prod
,它是产品的条形码。这是与products
表和另一个的关系。更新是针对所有字段执行的,但是在数据库管理员中,cod_prod
表中的inventory
字段未更新,在{{1}中仅变为null
}表中执行更新,products
表中的字段reg_date
也会被更新。仅inventory
表上的cod_prod
字段未更新,我也不知道为什么。
viewmodel:
inventory
控制器:
public class products
{
[display(Name = "Name")]
public string name { get; set; }
[Key]
[display(Name = "Product Code")]
public string cod_prod { get; set; }
[display(Name = "Register Date")]
[DataType(DataType.Date)]
[displayFormat(ApplyFormatInEditMode = true,DataFormatString = "{0:dd/MM/yyyy}")]
public DateTime? reg_date { get; set; }
}
任何建议都值得赞赏。
更新:
[HttpGet]
public ActionResult prodEdit(int id)
{
using (inventarioEntitiesDBA dc = new inventarioEntitiesDBA())
{
var u = dc.products.Where(a => a.id == id).FirstOrDefault();
if (u != null)
{
var pm = new products
{
name = u.name,cod_prod = u.cod_prod,reg_date = u.reg_date
};
var b = dc.inventory.Where(x => x.cod_prod == pm.cod_prod).FirstOrDefault();
u.cod_prod = b.cod_prod;
return View(u);
}
return Content("Invalid Request");
}
}
[HttpPost]
public ActionResult prodEdit(products prod)
{
using (inventarioEntitiesDBA dc = new inventarioEntitiesDBA())
{
var u = dc.products.Where(a => a.id == prod.id).FirstOrDefault();
var b = dc.inventory.Where(x => x.cod_prod == prod.cod_prod).FirstOrDefault();
inventory bod = new inventory()
{
cod_prod = prod.cod_prod,reg_date = prod.reg_date
};
dc.inventory.Remove(b);
dc.inventory.Add(bod);
dc.products.Remove(u);
dc.products.Add(prod);
dc.SaveChanges();
return RedirectToAction("prodList","products");
}
}
的模型:
products
public partial class products
{
[display(Name = "Name")]
public string name { get; set; }
[Key]
[display(Name = "Product Code")]
public string cod_prod { get; set; }
}
的模型:
inventory
解决方法
如果某人发生相同的事情,这就是我为解决此问题而写的内容,ValueEventListener
有两个controller
方法,第一个删除已更改的字段,保存数据库并发送post
和products
对象是第二种方法,在那里添加了模型的新数据并保存。我之所以必须这样做,是因为删除inventory
表上的PK会导致products
事情。
控制器:
null
,
假设“产品”和“库存”表之间具有一对一的关系,则模型在EF中将如下所示:
产品型号
public class Products
{
[Display(Name = "Name")]
public string name { get; set; }
[Key]
[Display(Name = "Product Code")]
public string cod_prod { get; set; }
public virtual Inventory Inventory {get;set;}
}
库存模型
public class Inventory
{
[Key,ForeignKey("Products")]
[Display(Name = "Product Code")]
public string cod_prod { get; set; }
[Display(Name = "Register Date")]
[DataType(DataType.Date)]
[DisplayFormat(ApplyFormatInEditMode = true,DataFormatString = "{0:dd/MM/yyyy}")]
public DateTime? reg_date { get; set; }
public virtual Products Products {get;set;}
}
配置了关联后,您只需在POST方法中执行此操作即可更新产品和库存:
[HttpPost]
public ActionResult prodEdit(Products prod)
{
using (inventarioEntitiesDBA dc = new inventarioEntitiesDBA())
{
var product = dc.products.Where(a => a.id == prod.id).FirstOrDefault();
var inventory = product.Inventory;
inventory.cod_prod = prod.cod_prod;
inventory.reg_date = prod.reg_date;
dc.SaveChanges();
return RedirectToAction("prodList","products");
}
}
您可以阅读有关如何配置EF关系here的更多信息。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。