C# EF将实体列表添加到现有实体
我在尝试将实体列表添加到现有实体时遇到问题 示例- My object Trade提供了一个列表,并选择了一个列表 首次创建交易时,它包含一个提供项目的列表。当某人从提供的字段中选择项目时,他们将保存在所选字段中 在我的保存中,我做了以下操作C# EF将实体列表添加到现有实体,c#,entity-framework,C#,Entity Framework,我在尝试将实体列表添加到现有实体时遇到问题 示例- My object Trade提供了一个列表,并选择了一个列表 首次创建交易时,它包含一个提供项目的列表。当某人从提供的字段中选择项目时,他们将保存在所选字段中 在我的保存中,我做了以下操作 internal void acceptTrade(Trade trade) { using(var context = new datacontext()) { Context.Entry(Trade).State = EntityS
internal void acceptTrade(Trade trade)
{
using(var context = new datacontext())
{
Context.Entry(Trade).State = EntityState.Modified;
Trade.Status = "Accepted";
Foreach(selected)
{
Context.entry(selected).State = EntityState.Added;
}
Context.SaveChanges();
}
}
然而,我得到了以下错误
附加item类型的实体失败,因为相同类型的另一个实体已具有相同的主键值。如果图形中的任何实体具有冲突的键值,则在使用“attach”方法或将实体状态设置为“unchanged”或“modified”时可能会发生这种情况。这可能是因为某些实体是新的,尚未收到数据库生成的键值。在这种情况下,使用“添加”方法或“添加”实体状态来跟踪图形,然后设置非新实体的状态
我试图将每个提供的状态设置为不变
internal void acceptTrade(Trade trade)
{
Context.Entry(Trade).State = EntityState.Modified;
Trade.Status = "Accepted";
Foreach(selected)
{
Context.entry(selected).State = EntityState.Added;
}
foreach(offered)
{
Context.Entry(offered).State = EntityState.Unchanged;
}
Context.SaveChanges();
}
我仍然会犯同样的错误
我甚至试着通过做以下操作来使用迁移
db.set<Trade>().AddorUpdate(trade);
db.set().AddorUpdate(贸易);
没有发生任何错误,但未保存或修改任何内容。是否保持上下文的活动状态?这些交易对象是从同一上下文实例加载的吗?否该交易对象是从以前的数据库调用加载的。然后在控制器中,我获取现有的交易对象,将所选项目添加到交易对象中,并将整个交易对象传递到AcceptTrade调用中。因此,这是现有对象的新上下文。错误的实质是,当一个实体已存在且具有相同密钥时,您正在尝试附加该实体。我认为您在该上下文中加载了一个具有相同id的交易实体,现在您正试图从另一个上下文中附加另一个具有相同id的交易实体。