【问题标题】:Updating Master / Details in MVC在 MVC 中更新主/详细信息
【发布时间】:2017-12-07 13:04:30
【问题描述】:

我正在尝试更新 Master/Details 关系。目前我的代码只更新主表,但没有向详细信息页面添加任何内容。 我可以很好地将记录添加到两个表中,但我希望能够更新主表并同时将新条目添加到详细信息中。 屏幕截图显示了正在传递给我的控制器的数据。

    [HttpPost]
    public JsonResult saveEdit(OMR_OrderMaster order)
    {
        bool status = false;

        {
            using (PPPEntities dc = new PPPEntities())
            {
                {

                    db.Entry(order).State = EntityState.Modified;
                    db.SaveChanges();
                    status = true;
                }
            }
        }
        return new JsonResult { Data = new { status = status } };
    }

目前没有返回错误,只是更新了主表

namespace PPP2.Models
{
using System;
using System.Collections.Generic;

public partial class OMR_OrderMaster
{
    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
    public OMR_OrderMaster()
    {
        this.OMR_OrderDetails = new HashSet<OMR_OrderDetails>();
    }

    public int OrderID { get; set; }
    public string OrderNo { get; set; }
    public System.DateTime OrderDate { get; set; }
    public string Description { get; set; }

    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
    public virtual ICollection<OMR_OrderDetails> OMR_OrderDetails { get; set; }
}

}

namespace PPP2.Models
{
using System;
using System.Collections.Generic;

public partial class OMR_OrderDetails
{
    public int OrderDetialsID { get; set; }
    public int OrderID { get; set; }
    public decimal Rate { get; set; }
    public int Quantity { get; set; }
    public int StockID { get; set; }

    public virtual OMR_OrderMaster OMR_OrderMaster { get; set; }
    }
}

【问题讨论】:

  • 请告诉我们OMR_OrderMasterOMR_OrderDetails类定义。
  • 以上代码更新
  • 你确定在你的 sql 数据库中定义了主键吗?

标签: c# sql visual-studio model-view-controller edmx


【解决方案1】:

因为您在 EDMX 上下文中,所以您必须使用 Attach 函数,例如:

using (PPPEntities dc = new PPPEntities())
{
     foreach(var details in order.OMR_OrderDetails)
          dc.ORM_OrderDetails.Attach(details);
     dc.Entry(order).State = EntityState.Modified;
     dc.SaveChanges();
     status = true;
 }

在您声明PPPEntities 上下文但您不使用它的代码中要小心。您的代码正在调用未定义的db var。

【讨论】:

    【解决方案2】:

    使用 Attach 会引发错误,但在我的情况下更改为 add 有效 所以,谢谢你让我走上正轨

                    foreach (var details in order.OMR_OrderDetails)
                    dc.OMR_OrderDetails.Add(details);
                    dc.Entry(order).State = EntityState.Modified;
                    dc.SaveChanges();
                    status = true;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-12-06
      • 2016-12-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多