【问题标题】:Insert nested object from Web Api using Entity Framework使用实体框架从 Web Api 插入嵌套对象
【发布时间】:2019-08-07 01:55:45
【问题描述】:

我第一次尝试在 EF 中使用控制器类,所有代码都是为 web api 自动生成的。

所以我有一个具有一些属性的对象,它还有另一个对象。我希望能够插入嵌套对象,但它没有被添加......只有主对象。我调试了 Post Api,我可以看到这些值,但它们没有被插入到它的表中。

这是我的课程

public class Inventory
{
    public int InventoryID { get; set; }
    public string Operator { get; set; }
    public string Warehouse { get; set; }
    public decimal Total { get; set; }
    public DateTime Date { get; set; }

    public Localization Localization { get; set; }
}

public class Localization
{
    public int LocalizationID { get; set; }
    public string Reference { get; set; }
    public int TicketsToStore { get; set; }
    public int TicketsStored { get; set; }
    public bool IsValid { get; set; }
    public decimal Precision { get; set; }
}

基本上清单是与本地化的一对多关系

这是生成的post api函数

// POST: api/Inventories
[ResponseType(typeof(Inventory))]
public IHttpActionResult PostInventory(Inventory inventory)
{
    if (!ModelState.IsValid)
    {
        return BadRequest(ModelState);
    }

    db.Inventories.Add(inventory);
    db.SaveChanges();

    return CreatedAtRoute("DefaultApi", new { id = inventory.InventoryID }, inventory);
}

这是我的发帖请求

$("#btnAdd").click(function () {

        debugger

        var Inventory= {
            "Operator": $("#Operator").val(),
            "Warehouse": $("#Warehouse").val(),
            "Total": $("#Total").val(),
            "Date": $("#Date").val(),
        };

        var Localization = {
            "Reference": $("#Reference").val(),
            "TicketsToStore": $("#TicketsToStore").val(),
            "TicketsStored": $("#TicketsStored").val(),
            "IsValid": $("#IsValid").val(),
            "Precision": $("#Precision").val()
        }

        Inventory.Localization = Localization;

        $.ajax({
            type: "POST",
            url: 'api/inventaries',
            data: JSON.stringify(Inventory),
            contentType: "application/json;charset=utf-8",
            success: function (data, status, xhr) {
                alert("The result is : " + status + ": " + data);
            },
            error: function (xhr) {
                alert(xhr.responseText);
            }
        });
    });

我的问题是,我在这里做错了什么?

【问题讨论】:

标签: c# asp.net entity-framework asp.net-web-api


【解决方案1】:

我实际上发现了问题,我下载了一个用于 Visual Studio 的 EF 工具,如果你右键单击上下文类,我会为 Code First 创建 EF 图表模型,我看到关系被颠倒了。 1 本地化有很多库存,它应该是相反的。因此,为什么它没有插入表中。

如果有人犯了同样的错误,这是 Code First Approach 的一个很好的教程

http://www.entityframeworktutorial.net/code-first/configure-one-to-many-relationship-in-code-first.aspx#configure-one-to-many-using-fluent-api

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多