Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何从编辑视图ASP.NET MVC更新两个表?_C#_Asp.net Mvc_Entity Framework_Razor - Fatal编程技术网

C# 如何从编辑视图ASP.NET MVC更新两个表?

C# 如何从编辑视图ASP.NET MVC更新两个表?,c#,asp.net-mvc,entity-framework,razor,C#,Asp.net Mvc,Entity Framework,Razor,我试图更新两个表中的数据产品和库存。表products的主键是cod\u prod,它是产品的条形码。这是与产品表和其他表的关系。对所有字段执行更新,但在数据库管理员中,inventory表中的cod\u prod字段未更新,它仅变为null,在products表中执行更新,reg\u date字段,也会更新库存表中的字段。只有inventory表上的cod\u prod字段没有更新,我不知道为什么 视图模型: public class products { [Display(Name

我试图更新两个表中的数据<代码>产品和
库存
。表
products
的主键是
cod\u prod
,它是产品的条形码。这是与
产品
表和其他表的关系。对所有字段执行更新,但在数据库管理员中,
inventory
表中的
cod\u prod
字段未更新,它仅变为
null
,在
products
表中执行更新,
reg\u date
字段,也会更新
库存
表中的字段。只有
inventory
表上的
cod\u prod
字段没有更新,我不知道为什么

视图模型:

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");

    }
}
    [HttpPost]
    public ActionResult prodEdit(products prod)
    {
        using(inventarioEntitiesDBA dc = new inventarioEntitiesDBA())
        {
            var u = dc.products.Where(a => a.id == prod.id).FirstOrDefault();

            if(u != null)
            {
                var pm = new products
                {
                    prod_name = prod.prod_name,
                    cod_prod = prod.cod_prod,
                    fecha_ingreso = prod.fecha_ingreso
                };

                var b = dc.bodega.Where(x => x.cod_prod == u.cod_prod).FirstOrDefault();
                
                if (b != null)
                {

                    inventory inv = new inventory()
                    {
                        reg_date = pm.fecha_ingreso,
                        cod_prod = pm.codigo_prod
                    };



                    if (inv.cod_prod != null)
                    {
                        dc.inventory.Remove(b);
                        dc.products.Remove(u);

                        dc.SaveChanges();

                        prodEdit2(prod, bod);
                    }
                }
            }
            return RedirectToAction("prodList", "products");
        }
    }

    [HttpPost]
    public ActionResult prodEdit2(products p, inventory i)
    {
        using (inventarioEntitiesDBA dc = new inventarioEntitiesDBA())
        {
            dc.products.Add(p);
            dc.inventory.Add(i);

            dc.SaveChanges();

            return RedirectToAction("prodList", "products");
        }
    }
如有任何建议,我们将不胜感激

更新:

产品的型号

public partial class products
{

   [Display(Name = "Name")]
   public string name { get; set; }

   [Key]
   [Display(Name = "Product Code")]
   public string cod_prod { get; set; }
}
存货的型号

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; }
}

如果同样的事情发生在某人身上,这就是我写的解决方法,
controller
有两个
post
方法,第一个方法删除已更改的字段,保存数据库并将
产品
库存
对象发送到第二个方法,在那里添加模型的新数据并保存。我不得不这样做,因为删除
products
表上的PK会导致
null
这件事

控制器:

[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");

    }
}
    [HttpPost]
    public ActionResult prodEdit(products prod)
    {
        using(inventarioEntitiesDBA dc = new inventarioEntitiesDBA())
        {
            var u = dc.products.Where(a => a.id == prod.id).FirstOrDefault();

            if(u != null)
            {
                var pm = new products
                {
                    prod_name = prod.prod_name,
                    cod_prod = prod.cod_prod,
                    fecha_ingreso = prod.fecha_ingreso
                };

                var b = dc.bodega.Where(x => x.cod_prod == u.cod_prod).FirstOrDefault();
                
                if (b != null)
                {

                    inventory inv = new inventory()
                    {
                        reg_date = pm.fecha_ingreso,
                        cod_prod = pm.codigo_prod
                    };



                    if (inv.cod_prod != null)
                    {
                        dc.inventory.Remove(b);
                        dc.products.Remove(u);

                        dc.SaveChanges();

                        prodEdit2(prod, bod);
                    }
                }
            }
            return RedirectToAction("prodList", "products");
        }
    }

    [HttpPost]
    public ActionResult prodEdit2(products p, inventory i)
    {
        using (inventarioEntitiesDBA dc = new inventarioEntitiesDBA())
        {
            dc.products.Add(p);
            dc.inventory.Add(i);

            dc.SaveChanges();

            return RedirectToAction("prodList", "products");
        }
    }

假设产品和库存表之间有一对一的关系,您的模型在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关系的更多信息。

请显示您的模型。我用两个表的模型更新了问题。再次感谢您的建议。在
POST
操作上设置一个断点,查看
cod\u prod
是否为空。感谢您的回复,我真的不知道我可以用这种方式进行更新。我发布的解决方案是我能找到的唯一解决问题的方法,但是有了这个解决方案,你可以看出这要容易得多。