【问题标题】:Inserting entity doesn't update Key field插入实体不会更新键字段
【发布时间】:2014-12-19 10:29:05
【问题描述】:

我正在尝试使用 GraphDiff 将分离的实体插入数据库。

它是这样的:

public IHttpActionResult Post([FromBody] Foo foo) {
    var newFoo = fooBusiness.AddObject(foo);
    if (newFoo != null) {
        return CreatedAtRoute("GetOperation", new { id = newFoo.Id }, newFoo);
    }
    return Conflict();
}

而我的addObject 功能基本上是:

public Foo AddObject(Foo entity)
{
    UpdateGraph(entity);
    _context.SaveChanges();
    return entity;
}

public override void UpdateGraph(Foo entity)
{
    DataContext.UpdateGraph(entity, map => map
        .AssociatedCollection(e => e.Bars)
        .AssociatedEntity(e => e.Baz)
    );
}

当我尝试获取新添加的 Foo 的 Id 时出现问题,它仍然为空 (0)。

EF 不应该将对象更新为它实际插入数据库的内容吗?我错过了什么吗?

【问题讨论】:

    标签: c# entity-framework graphdiff


    【解决方案1】:

    好吧,我在发布UpdateGraph 有一个返回类型并且我没有使用它的问题之前就发现了..

    如果不使用返回的实体,实体状态会很好地更新,但实体跟踪将完全失败。

    将我的AddObject 更改为此解决了问题:

    public Foo AddObject(Foo entity)
    {
        entity = UpdateGraph(entity);
        _context.SaveChanges();
        return entity;
    }
    
    public override Foo UpdateGraph(Foo entity)
    {
        return DataContext.UpdateGraph(entity, map => map
            .AssociatedCollection(e => e.Bars)
            .AssociatedEntity(e => e.Baz)
        );
    }
    

    【讨论】:

    • 你应该接受你自己的答案,这样人们就知道它已经解决了。
    • @RaduPascal 我会在接受自我回答的 2 天期限结束时 :)
    • 抱歉,不知道。
    猜你喜欢
    • 2019-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-20
    • 2017-02-01
    相关资源
    最近更新 更多