微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何从Edit View ASP.NET MVC更新两个表?

如何解决如何从Edit View ASP.NET MVC更新两个表?

我正在尝试更新两个表中的数据; productsinventory。表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方法,第一个删除已更改的字段,保存数据库并发送postproducts对象是第二种方法,在那里添加了模型的新数据并保存。我之所以必须这样做,是因为删除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 举报,一经查实,本站将立刻删除。