Вставить вложенный объект из Web Api с помощью Entity Framework - PullRequest
0 голосов
/ 16 марта 2019

Я пытаюсь использовать класс контроллера впервые с EF, и весь код был сгенерирован автоматически для веб-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; }
}

По сути, Inventory - это отношение один-многос локализацией

это функция 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);
            }
        });
    });

Мой вопрос: что я здесь не так делаю?

1 Ответ

0 голосов
/ 16 марта 2019

Я действительно обнаружил проблему, я скачал инструмент EF для Visual Studio, который создает модели диаграмм EF для Code First, если вы щелкнули правой кнопкой мыши по контекстному классу, и я увидел, что отношение было перевернуто.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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...