gpt4 book ai didi

c# - 带有 ASP.NET MVC 的 Entity Framework

转载 作者:行者123 更新时间:2023-11-30 15:12:42 25 4
gpt4 key购买 nike

如何将强类型 Controller 与 EntityObject 一起使用?

我的失败...

首先我尝试了这个:

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Edit(Guid id, Department Model)
{
db.SaveChanges();
return RedirectToAction("Index");
}

这实际上未能将任何更改保存到数据库中。因此,我尝试将模型附加到我的 ObjectContext:

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Edit(Guid id, Department Model)
{
db.Attach(Model);
db.SaveChanges();
return RedirectToAction("Index");
}

这失败了,因为“无法将具有空 EntityKey 值的对象附加到对象上下文。”所以,我尝试分配 EntityKey:

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Edit(Guid id, Department Model)
{
Model.EntityKey = (from Department d in db.Department
where d.Id == id
select d).FirstOrDefault().EntityKey;
db.Attach(Model);
db.SaveChanges();
return RedirectToAction("Index");
}

这失败了,因为“ObjectStateManager 中已经存在具有相同键的对象。ObjectStateManager 无法跟踪具有相同键的多个对象。”

这应该如何工作?

最佳答案

问题是,您作为输入所拥有的不是具有更改属性的完整模型对象 - 它只是新对象的“开始”,具有您想要覆盖现有实体的所有属性。您不发布任何 ID 属性,

这看起来有点冗长,但它是我发现的最好的,所以我在我的项目中就是这样做的(根据你的类名进行调整,遗漏的任何内容都补上...):

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Edit(Guid id, Department Model)
{
var dbDepartment = (from Department d in db.Department
where d.Id == id
select d).FirstOrDefault() as Department

dbDepartment.Name = Model.Name;
dbDepartment.Color = Model.Color;
// etc, assigning values manually...

try
{
db.SaveChanges();
}
catch (Exception ex)
{
// oops...
}
return RedirectToAction("Index");
}

关于c# - 带有 ASP.NET MVC 的 Entity Framework ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/895564/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com