gpt4 book ai didi

c# - 实体对象附加/不附加到 dbContext

转载 作者:行者123 更新时间:2023-11-30 20:51:54 25 4
gpt4 key购买 nike

我有以下 EF 数据语句:

class Model1{
public Int32 Id{ get; set; }
public string Prop1 { get; set; }
public string Prop2 { get; set; }
public string Prop3 { get; set; }
public virtual Model3 PropModel31{ get; set; }
public virtual Model3 PropModel32{ get; set; }
}
class Model3{
public Int32 Id{ get; set; }
public string Prop1 { get; set; }
public string Prop2 { get; set; }
}

我在不同的地方请求我的实体:

//db being the datacontext
//Partial view of Model1
var model1s = from model1 in db.Model1
select new {
model1.Id,
model1.Prop1,
model1.Prop2,
model1.PropModel31,
model1.PropModel32,
};

稍后,我尝试更新模型实体,

public ActionResult Save(Model1 model1)
{
db.Model1.Attach(model1);
var entry = db.Entry(model1);
entry.Property(e => e.Prop1).IsModified = true;
entry.Property(e => e.Prop2).IsModified = true;
...
db.SaveChanges();
}

但我得到以下异常:

ObjectStateManager 中已存在具有相同键的对象。 ObjectStateManager 无法跟踪具有相同键的多个对象。

如果我评论 db.Model1.Attach(model1); 那么我会得到相反的异常:/

无法为属性“Prop1”调用成员“IsModified”,因为类型“Model1”的实体在上下文中不存在。要将实体添加到上下文,请调用 DbSet 的 Add 或 Attach 方法

所以,我的猜测是 Model3 实体属性附加到上下文,但如何检查、修复它?

感谢您的帮助。

最佳答案

嗯,异常被触发是因为子实体属性之一 PropModel31 被重置为新的(Id=0)。

异常并不是很明确。

非常感谢 Andrew Counts 的时间和专业知识!

关于c# - 实体对象附加/不附加到 dbContext,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21324004/

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