Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# EF将实体列表添加到现有实体_C#_Entity Framework - Fatal编程技术网

C# EF将实体列表添加到现有实体

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

我在尝试将实体列表添加到现有实体时遇到问题

示例-

My object Trade提供了一个列表,并选择了一个列表

首次创建交易时,它包含一个提供项目的列表。当某人从提供的字段中选择项目时,他们将保存在所选字段中

在我的保存中,我做了以下操作

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的交易实体。