c# - 如何从编辑视图 ASP.NET MVC 更新两个表?
问题描述
我正在尝试更新两个表中的数据;products
和inventory
。表的主键products
是cod_prod
,它是产品的条形码。这是与products
表和其他的关系。对所有字段进行更新,但是在数据库管理员cod_prod
中,表中的字段inventory
没有更新,它只是变成null
,在products
表中进行了更新,reg_date
字段,也就是inventory
表中的字段更新。只有表cod_prod
上的字段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
:
public partial class inventory
{
[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; }
}
解决方案
假设您在 Products 和 Inventory 表之间存在一对一的关系,您的模型在 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 关系的更多信息。
推荐阅读
- python - 获取 pandas 多索引的 dtype
- database - 带有简单示例的 DLOOKUP STRING CRITERA
- php - php 和 bash 一起生成密钥
- xaml - 现在显示 WPF 数据绑定数据
- spring-boot - Java客户端刷新keycloak令牌
- python - 如何在 Python 中使用蒙特卡罗方法计算 10 维球体的体积?
- ruby-on-rails - ajax-datatables-rails 如何使用 view_columns 与一个类关联两次
- wordpress - WP-Content 下的 Wordpress 临时文件夹
- angular - 一列中的服务器端渲染和编辑按钮
- javascript - 使用 for 循环和另一个数组填充数组