【问题标题】:EntityFramework with WEB API, update all propertiesEntityFramework 与 WEB API,更新所有属性
【发布时间】:2015-09-17 08:07:40
【问题描述】:

我正在使用带有 WEB API 的 EF。 我有一个 PUT 方法,它更新已经在数据库中的实体。 现在我有这个:

        // PUT api/fleet/5
        public void Put(Fleet fleet)
        {
            Fleet dbFleet = db.Fleets.Find(fleet.FleetId);
            dbFleet.Name = fleet.Name;
            dbFleet.xy= fleet.xy;
            //and so on....
            db.SaveChanges();
        }

但我很懒,只想写这样的东西:

dbFleet.update(fleet);

所以我不必自己更新每个属性。

我确定有办法,但我只能找到有关如何使用 MVC 执行此操作的答案,但在使用 WEB API 且未接收模型状态时找不到答案。

谢谢

【问题讨论】:

    标签: c# linq entity-framework-4 asp.net-web-api2


    【解决方案1】:

    刚刚找到答案...

    // PUT api/fleet/5
    public void Put(Fleet fleet)
    {
        db.Entry(fleet).State = EntityState.Modified;
        db.SaveChanges();
    }
    

    我唯一不满意的是它没有更新子对象。 Fleet 的 FleetAttributes 不会像这样更新。但我想我可以轻松地循环它们......

    编辑这对我有用:

    // PUT api/fleet/5
    public void Put(Fleet fleet)
    {
        db.Entry(fleet).State = EntityState.Modified;
        foreach (var item in fleet.FleetAttributes)
        {
            db.Entry(item).State = EntityState.Modified;
        }
        db.SaveChanges();
    }
    

    【讨论】:

    • 不错!我也被困在更新子对象上。你做得很好。谢谢。
    【解决方案2】:
    db.Fleets.Attach(fleet);
    db.Entry(fleet).State = EntityState.Modified;
    db.SaveChanges();
    

    【讨论】:

    • 这是否还会递归地将依赖实体标记为已修改?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-08-30
    • 2014-05-24
    • 2019-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多