簡體   English   中英

Apress Pro Asp.net MVC框架3 - SportsStore編輯產品不工作?

[英]Apress Pro Asp.net MVC Framework 3 - SportsStore Edit Product not working?

G'day All,有沒有人購買了Apress Pro Asp.net MVC Framework 3的ALPHA並創建了SportsStore? 我不能為我的生活編輯產品並成功更新數據庫? 沒有錯誤顯示和單元測試都運行,但沒有成功的'編輯',即我更改一些細節,點擊保存,它報告成功 - 然后檢查結果,沒有發生任何事情? 通過SportsStore工作時有沒有其他人發現這個? 任何建議將不勝感激。

干杯。

保存前需要更新EF對象的狀態。

public void SaveProduct(Product product)
        {
            if (product.ProductID == 0)
            {
                context.Products.Add(product);
            }
            else
            {
                context.Entry(product).State = System.Data.EntityState.Modified;
            }


            int result = context.SaveChanges();

        }

我還不能發表評論,但我想通過展示你的最終方法應該閱讀的內容來添加MVC Newbie的評論:

public void SaveProduct(Product product) {
    if (product.ProductID == 0) {
        context.Products.Add(product);
    } else {
        context.Entry(product).State = EntityState.Modified;
    }
    int numSaved = context.SaveChanges();
}

另外不要忘記添加額外的using語句(再次提到MVC Newbie):

//using system.data;

請嘗試以下方法。 想法是產品參數,即綁定到Action方法的MVC模型不與EF同步,因此我們需要將它與存儲庫相關聯:

public ActionResult Edit(Product product)   
{
    if (ModelState.IsValid)
    {
        ((ObjectSet<Product>)repository.Products).ApplyCurrentValues(product);

        repository.SaveProduct(product);
        TempData["message"] = string.Format("{0} has been saved", product.Name);
        return RedirectToAction("Index");
    }
    else 
    {
        return View(product);
    }
}

我使用Apress Pro ASP.NET MVC3的最終版本遇到了同樣的問題。 使用Visual Studio調試器我注意到,當執行context.SaveChanges() (SportsStore.Domain.Concrete.EFProductRepoistory)時,上下文沒有更改為我們在編輯視圖中所做的更改。 雖然在SaveProduct()的構造函數中定義了產品

所以我猜我們要做的就是將Context.Products.Product更改為構造函數中的產品,如下所示:

        else
        {
            context.Products.Find(product.ProductId) = product;
        }

不幸的是,Visual Studio給了我這個錯誤:

錯誤1賦值的左側必須是變量,屬性或索引器

為了使它工作,我必須這樣做:

        else
        {
            context.Products.Find(product.ProductID).Name = product.Name;
            context.Products.Find(product.ProductID).Description = product.Description;
            context.Products.Find(product.ProductID).Category = product.Category;
            context.Products.Find(product.ProductID).Price = product.Price;
        }

這確實有效。 但是我認為這遠非理想,而不是最好的方法。

有沒有辦法以我只是在上下文中編輯/更新整個Product對象而不是逐個編輯每個屬性的方式來執行此操作?

public void SaveProduct(Product product)
{
    var prod = context.Products.SingleOrDefault(p => p.ProductID == product.ProductID);
    if (product.ProductID > 0)  
    {
        context.Products.Remove(prod);
    }
    context.Products.Add(product);            
    context.SaveChanges();
}

試試這個

 public ActionResult Edit(Product product)
    {
        if (ModelState.IsValid)
        {
            Product p = repository.Products.FirstOrDefault(x => x.ProductID == product.ProductID);
            if (p != null)
            {
                p.ProductID = product.ProductID;
                p.Price = product.Price;
                p.Category = product.Category;
                p.Description = product.Description;
                p.Name = product.Name;
            }
            else
                p = product;
            repository.SaveProduct(p);
            TempData["message"] = string.Format("{0} has been saved", product.Name);
            return RedirectToAction("Index");
        }
        else 
        {
            return View(product);
        }
    }

我初學者用mvc 3,但我認為模型參考(產品參數)是一個沒有綁定到EF上下文的Product對象

這是答案

public void SaveProduct(Product product)
    {
        var prod = context.Products.SingleOrDefault(p => p.ProductID == product.ProductID);

        if (product.ProductID > 0)
        {
            context.Products.Remove(prod);
        }
            context.Products.Add(product);            
            context.SaveChanges();
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM