使用关联的新记录更新EntityFramework记录

时间:2014-12-23 15:12:06

标签: c# asp.net-mvc entity-framework entity-framework-5

我正在尝试使用一个附加到EF来更新我需要的所有记录。

public void UpdateSale(Sale s)
    {
        Context.Sales.Attach(s);
        Context.Entry(s).State = System.Data.Entity.EntityState.Modified;
        Context.SaveChanges();
    }

让我们这样说。上面的代码给了我一个错误,因为它说我试图添加的主键已经存在(它们还没有自动生成)

现在Sale里面有许多不同的其他实体模型,如: SavedForm,ProductSale

现在调用UpdateSale的代码在这里

        public JsonResult AddNewForms(string Anamaka, string NispahB, string Hazaot, string ManufactorerID, string ClientStatus, string TypeFile)
    {
        BL.FormConnectorLogic fcl = new BL.FormConnectorLogic();
        DAL.SavedForm AnamakaForm = MakeSavedForm(Boolean.Parse(Anamaka),"מסמך הנמקה",ClientStatus);
        DAL.SavedForm NispahBForm = MakeSavedForm(Boolean.Parse(NispahB), "נספח ב", ClientStatus);
        DAL.SavedForm HazaotForm = MakeSavedForm(Boolean.Parse(Hazaot), TypeFile, ClientStatus, ManufactorerID);
        var results = new { A = AnamakaForm, N = NispahBForm, H = HazaotForm  };
        return Json(results, JsonRequestBehavior.AllowGet);
    }

    public DAL.SavedForm MakeSavedForm(bool Authorized, string FormName, string ClientStatus, string ManufactorerID = "")
    {
        DAL.Sale s = (DAL.Sale)Session["SaleSave"];
        DAL.SavedForm sf = new DAL.SavedForm();
         if (Authorized)
         {
            sf = new DAL.SavedForm();
            sf.FormName = new BL.FormConnectorLogic().getFormByName(FormName, ClientStatus, ManufactorerID).FormName;
            sf.DateFormed = DateTime.Now;
            sf.AgentID = s.AgentID;
            sf.Status = "פתוח";
            sf.SaleID = s.ID;
            s.SavedForms.Add(sf);
            new BL.SaleLogic().UpdateSale(s);
            Session["SaleSave"] = s;
            return sf;
        }
        else return null;

}

现在我已经阅读了State,并且添加和修改之间存在差异。 虽然我似乎无法告诉我何时要添加以及何时进行修改。 反正是无视一切,只是把我的整个班级及其所有关系推到数据库中?

0 个答案:

没有答案