更新

时间:2018-01-06 15:22:16

标签: c# asp.net entity-framework linq

我目前正在尝试使用LINQ更新类别的非常简单的功能。但是dbContext.SaveChanges()总是返回0行更新,即使我将categoryId硬编码更新,这真的很令人沮丧。我已经尝试了很多种调试方法,但未能找到问题。如果有人能帮助我弄清楚我的愚蠢错误,我将不胜感激!

我尝试过的事情, - 尝试查看具有该category_Id的行是否存在,始终返回1是正确的。

    var count = (from c in dbContext.RecipeCategories
                      where c.Category_Id == categoryToEdit
                      select c).Count();

删除myCategory而不是尝试更新它,也可以。似乎只有更新不起作用。

    dbContext.RecipeCategories.Remove(myCateogry);

我的DALayer类别功能

    public bool EditCategory(int categoryToEdit, RecipeCategory newCategoryInfo)
    {
        RecipeXchangeDBContext dbContext = new RecipeXchangeDBContext();
        RecipeCategory myCategory = new RecipeCategory();
        bool status = false;

        myCategory = (from c in dbContext.RecipeCategories
                      where c.Category_Id == categoryToEdit
                      select c).First();

        myCategory.Category_Name = newCategoryInfo.Category_Name;
        myCategory.Description = newCategoryInfo.Description;
        myCategory.CatGroup_Id = newCategoryInfo.CatGroup_Id;

        try
        {
            if (dbContext.SaveChanges() == 1)
                status = true;
            else
                status = false;
        }
        catch (InvalidOperationException ex)
        {
            status = false;
        }
        return status;
    }

我尝试调用该函数,总是转到else块,dbContext.SaveChanges()返回0,没有抛出异常。

    protected void btnEditCategory_Click(object sender, EventArgs e)
    {
        if (Request.QueryString["categoryId"] != null)
        {
            CategoryDAL categoryDAL = new CategoryDAL();
            RecipeCategory myCategory = new RecipeCategory();
            try
            {
                addDiv.Attributes["class"] = "hidden";
                editDiv.Attributes["class"] = "display";

                int categoryToEdit = Convert.ToInt32(Request.QueryString["categoryId"]);

                myCategory.Category_Name = tbEditCategoryName.Text;
                myCategory.Description = tbEditCategoryDescription.Text;
                myCategory.CatGroup_Id = Convert.ToInt32(ddlEditCategoryGroupList.SelectedValue);

                try
                {
                    bool editStatus = categoryDAL.EditCategory(categoryToEdit, myCategory);
                    if (editStatus)
                    {
                        HttpContext.Current.Session["editStatus"] = "Successful";
                        Response.Redirect("~/Admin/ManageCategories.aspx");
                    }

                    else
                    {
                        lblEditStatus.Text = "Unable to update category, please try again";
                        lblEditStatus.CssClass = "alert-danger";
                    }
                }

                catch (Exception ex)
                {
                    lblEditStatus.Text = Convert.ToString(ex);
                    lblEditStatus.CssClass = "alert-danger";
                }
            }

            catch (Exception ex)
            {
                updateStatus.Attributes["class"] = "alert alert-info alert-dismissable fade in";
                updateStatus.Visible = true;
                lblStatus.Text = "Invalid categoryId.";
            }

        }

        else
        {
            updateStatus.Attributes["class"] = "alert alert-info alert-dismissable fade in";
            updateStatus.Visible = true;
            lblStatus.Text = "Nothing to update.";
        }
    }

更新**似乎这就是造成问题的原因。如果表单的值是预先填充的,则似乎不允许我更新对象。如果我注释掉它填充表单的部分。更新功能正常。任何人都可以帮我弄清楚为什么预填充表单导致更新失败?

    protected void Page_Load(object sender, EventArgs e)
    {
        // Populate Edit Fields
        if (Request.QueryString["categoryId"] != null)
        {
            CategoryDAL categoryDAL = new CategoryDAL();
            RecipeCategory myCategory = new RecipeCategory();
            try
            {
                addDiv.Attributes["class"] = "hidden";
                editDiv.Attributes["class"] = "display";

                int categoryToGet = Convert.ToInt32(Request.QueryString["categoryId"]);
                myCategory = categoryDAL.GetCategory(categoryToGet);

                tbEditCategoryName.Text = myCategory.Category_Name;
                tbEditCategoryDescription.Text = myCategory.Description;

                ddlEditCategoryGroupList.SelectedValue = Convert.ToString(myCategory.CatGroup_Id);
            }

            catch(Exception ex)
            {
                updateStatus.Attributes["class"] = "alert alert-info alert-dismissable fade in";
                updateStatus.Visible = true;
                lblStatus.Text = "Could not get Category Info, please try again.";
            }
        }
    }

0 个答案:

没有答案