【问题标题】:Entity Framework 4.1 - Child Object collection is duplicating after each saveEntity Framework 4.1 - 每次保存后子对象集合都会复制
【发布时间】:2011-10-27 16:59:02
【问题描述】:

我在使用实体框架 (EF4.1 - CodeFirst) 时遇到问题

它基本上是在复制子对象...

对象模型是一个 Job 中的多个 Task -> Task 有一个 TaskType 并且 TaskType 有多个 Statuses ...

起初它是在保存时复制 TaskTypes

但是,在我添加它之后,它停止复制 TaskTypes ...

context.Entry(task.TaskType).State = EntityState.Unchanged;

所以我尝试了这个状态...

        //tried this but it errors
        foreach (var status in task.TaskType.Statuses)
        {
            context.Entry(status).State = EntityState.Unchanged;
        }
        ////

但它与以下错误...

“存储更新、插入或删除语句影响了意外数量的行 (0)。实体可能在加载实体后已被修改或删除。刷新 ObjectStateManager 条目。”

这里是完整的代码......(为了便于阅读,一些 get 代码被删减了)

    using(var context = new JobContext())
    {
        var job = //Get with Includes;
        job.Tasks.Add(task);

        context.Jobs.Attach(job);

        context.Entry(task.TaskType).State = EntityState.Unchanged;

        //tried this but it errors
        foreach (var status in task.TaskType.Statuses)
        {
            context.Entry(status).State = EntityState.Unchanged;
        }
        ////

        context.SaveChanges();
    }

有人可以帮忙吗?

【问题讨论】:

    标签: entity-framework entity-framework-4 ef-code-first


    【解决方案1】:
    using(var context = new JobContext())
    {
        var job = //Get with Includes;
        context.Jobs.Attach(job); 
        // can be omitted if "Get with Includes" happens in the same context
    
        context.TaskTypes.Attach(task.TaskType);
        // attaches TaskType and all Statuses -> State is Unchanged
    
        job.Tasks.Add(task);
        // A new task will be created after SaveChanges. If you don't want that
        // replace Attach(task.TaskType) above by Attach(task)
    
        context.SaveChanges();
    }
    

    顺便说一句,您不需要加载Include。你可以在没有Include 的情况下加载(然后创建一个空集合job.Tasks = new List<Task>())。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-06-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-05
      相关资源
      最近更新 更多