【问题标题】:Asp.net core 2 webapi post related data insertAsp.net core 2 webapi post相关数据插入
【发布时间】:2018-01-19 10:56:25
【问题描述】:

如何告诉 EF Core 不要在帖子中插入相关数据?

这是我的 Deposito 和 Sucursal 模型

public class IDeposito
    {
        [Key]
        public int Id { get; set; }
        public string Descrip { get; set; }
        public string Alias { get; set; }
        public Boolean Activo { get; set; }
        public ISucursal Sucursal { get; set; }
    }
public class ISucursal
{

    [Key]
    public int Id { get; set; }
    public string Descrip { get; set; }
    public string Alias { get; set; }
    public Boolean Activo { get; set; }
}

这是我的控制器

    [HttpPost]
    public IActionResult Create([FromBody] IDeposito postData)
    {
        if (postData == null)
        {
            return BadRequest();
        }
        _context.Depositos.Add(postData);
        _context.SaveChanges();

        return CreatedAtRoute("GetDeposito", new { ID = postData.Id }, postData);
    }

当我发布这个模型时 { “描述”:“内乌肯”, “别名”:“NQN”, “活动”:是的, “Sucursal”:{ “身份证”:1, “描述”:“Comodoro Rivadavia”, “别名”:“CR”, “活动”:是的 } }

它失败是因为它试图插入到表“Sucursal”中,尽管已经存在一个 ID 为 1 的“Sucursal”。

无论如何我可以告诉 EF Core 不要更新相关表吗?非常感谢你

【问题讨论】:

    标签: asp.net-core asp.net-core-webapi


    【解决方案1】:

    如果您想将新的 IDeposito 连接到 Id = 1 的现有 ISucursal,请使用第一种方法:

    postData.Sucursal =  _context.Sucursals.Find(postData.Sucursal.Id);
    _context.Depositos.Add(postData);
    _context.SaveChanges();
    
    return CreatedAtRoute("GetDeposito", new { ID = postData.Id }, postData);
    

    如果您只想添加 IDeposito 而不添加任何 sucursal:

    postData.Sucursal = null;
    _context.Depositos.Add(postData);
    _context.SaveChanges();
    
    return CreatedAtRoute("GetDeposito", new { ID = postData.Id }, postData);
    

    【讨论】:

    • 哇!这条线成功了: postData.Sucursal = _context.Sucursales.Find(postData.Sucursal.Id);不太明白为什么,但是使用那行代码,EF 不会尝试插入新的 Sucursal。非常感谢,现在我可以清理我所有的控制器了。
    • 因为 EF Core 不跟踪 postData 中的实体。当您从 Db 实体框架中获取实体时,将此实体添加到跟踪中,并且知道它不应该将其添加为新实体,而只需将新的 IDeposito 与现有的 Secursal 连接
    • 现在更有意义了,也许我应该阅读更多关于 EF 如何跟踪数据的信息。再次,非常感谢。
    • 在制作模型时要注意的一点是在类名的顶部包含 [Table] 属性
    猜你喜欢
    • 2018-02-17
    • 2021-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-10
    • 2017-04-04
    • 2018-03-27
    • 2019-02-23
    相关资源
    最近更新 更多