通过 MVC 中的 ApplyPropertyChanges 对 EF 模型应用更改时出现异常

发布于 2024-11-03 05:52:22 字数 757 浏览 6 评论 0原文

我尝试保存已编辑的实体框架实体ApplyPropertyChanges,并收到异常:

“ObjectStateManager 不 包含一个 ObjectStateEntry 和 对类型对象的引用 'MvcApplication1.Models.Product'。"} System.Exception {系统.InvalidOperationException}

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Edit(Product productToEdit) //all properties of Product are valid
 {
                try
                {
productsDBEntities.ApplyPropertyChanges("ProductSet", productToEdit); //exception here
                    entities.SaveChanges();
                    return RedirectToAction("Index");
                }
                catch
                {
                    return View();
                }
            }

任何想法将不胜感激!

谢谢!

I try to save an edited Entity Framework entity ApplyPropertyChanges, and get an exception:

"The ObjectStateManager does not
contain an ObjectStateEntry with a
reference to an object of type
'MvcApplication1.Models.Product'."} System.Exception
{System.InvalidOperationException}

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Edit(Product productToEdit) //all properties of Product are valid
 {
                try
                {
productsDBEntities.ApplyPropertyChanges("ProductSet", productToEdit); //exception here
                    entities.SaveChanges();
                    return RedirectToAction("Index");
                }
                catch
                {
                    return View();
                }
            }

Any idea would be very much appreciated!

Thanks!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

甜扑 2024-11-10 05:52:22

如果您想使用 ApplyPropertyChanges,您必须首先从数据库加载 Product

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Edit(Product productToEdit) 
{
    try
    {
        entities.Products.Single(p => p.Id == productToEdit.Id);
        entities.ApplyPropertyChanges("ProductSet", productToEdit);
        entities.SaveChanges();
        return RedirectToAction("Index");
    }
    catch
    {
        return View();
    }
}

或者您可以使用另一种方法:

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Edit(Product productToEdit) 
{
    try
    {
        entities.AttachTo("ProductSet", productToEdit);
        entities.ObjectStateManager.GetObjectStateEntry(productToEdit).SetModified();
        entities.SaveChanges();
        return RedirectToAction("Index");
    }
    catch
    {
        return View();
    }
}

顺便说一句。您使用的是.NET 3.5吗? ApplyPropertyChanges 在 .NET 4.0 中已过时。

You must first load Product from database if you want to use ApplyPropertyChanges:

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Edit(Product productToEdit) 
{
    try
    {
        entities.Products.Single(p => p.Id == productToEdit.Id);
        entities.ApplyPropertyChanges("ProductSet", productToEdit);
        entities.SaveChanges();
        return RedirectToAction("Index");
    }
    catch
    {
        return View();
    }
}

Or you can use another approach:

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Edit(Product productToEdit) 
{
    try
    {
        entities.AttachTo("ProductSet", productToEdit);
        entities.ObjectStateManager.GetObjectStateEntry(productToEdit).SetModified();
        entities.SaveChanges();
        return RedirectToAction("Index");
    }
    catch
    {
        return View();
    }
}

Btw. are you using .NET 3.5? ApplyPropertyChanges is obsolete in .NET 4.0.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文